Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2009.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie über die REST-Schnittstelle auf die eBay-API zugreifen und nach Artikeln suchen.

Techniken

VBA, WebServices, Formulare

Voraussetzungen

Access 2000 und höher

Beispieldateien

eBay.mdb

Shortlink

650

eBay-Artikelsuche mit Access

André Minhorst, Duisburg

Access steuert alles fern, was nicht bei Drei auf dem nächsten Baum ist - und diesmal ist eBay dran. Zwar liefert die Handelsplattform keine VBA-Schnittstelle, aber der versierte Access-Entwickler scheut auch nicht vor dem Anzapfen eines Webservice zurück. Der von eBay bietet alle Möglichkeiten, die auch die Benutzeroberfläche im Browser liefert - und mehr. So können Sie den Webservice beispielsweise dazu nutzen, Artikel aus der Tabelle einer Warenwirtschaft in einem Rutsch online zu stellen. In diesem Beitrag beschäftigen wir uns jedoch erstmal mit der Suche nach Artikeln.

Wer schon einmal mit Webservices kommuniziert hat, kennt die eine oder andere Methode, mit der man dies erledigt. Die einfachste heißt REST und liefert auf eine HTTP-Anfrage, deren Parameter die Anfragedetails enthalten, ein XML-Dokument als Antwort.

Ebenfalls oft verwendet wird die Variante, bei der man bereits die Anfrage in ein XML-Dokument verpackt, das der Webservice auswertet und ebenfalls mit einem XML-Dokument beantwortet. In diesem Beitrag lernen Sie beide Varianten kennen, wobei REST sich einfacher testen lässt: Sie brauchen dazu nur die URL in den Browser einzutippen und erhalten direkt die passende Antwort im XML-Format.

REST ist allerdings kein Allheilmittel: Wer Artikel bei eBay einstellen möchte, wird schnell feststellen, dass eine URL-Zeile schnell unhandlich wird. An dieser Stelle versendet man seine Anfrage dann doch lieber als XML-Request.

Nur für Developer

Für den Zugriff auf die Webservices von eBay brauchen Sie in der Regel einen Developer-Account. Als Ausgangspunkt für das Anlegen eines solchen Kontos dient die Webadresse http://developer.ebay.com/. Hier klicken Sie auf den großen Join Now!-Link und gelangen zum Formular aus Abb. 1, dem Sie Ihre Daten anvertrauen müssen, um an einen eBay-Developer-Account zu gelangen. Was Sie hier mitnehmen, ist die Developer-User-ID und Ihr Kennwort.

pic001.png

Abb. 1: Anlegen eines eBay-Developer-Accounts

Nach dem Registrieren landen Sie auf Ihrer Account-Page, von wo aus Sie alle weiteren Schritte durchführen können, die für den Zugriff auf den eBay-Webservice nötig sind (s. Abb. 2).

pic002.png

Abb. 2: Die Steuerzentrale für eBay-Developer

Im Bereich application keys können Sie nun zwei Sätze von Schlüsseln erstellen. Das erste Paar dient dem Zugriff auf die Sandbox von eBay, die prinzipiell eine Kopie von eBay ist und alle dort enthaltenen Funktionen zum Testen zur Verfügung stellt. Das zweite Paar verschafft Ihnen Zutritt zur echten eBay-Welt.

Ein Klick auf generate sandbox keys erstellt die drei Schlüssel DEVID, AppID und CertID in Form von GUIDs und zeigt diese direkt in Ihrer Schaltzentrale an. Mit der Schaltfläche generate production keys beschaffen Sie sich den Schlüsselsatz für den produktiven Betrieb.

Nun fehlen nur noch wenige Details und Sie können den ersten Zugriff starten (genaugenommen könnten Sie das schon jetzt - aber wenn wir schon einmal dabei sind ...): Klicken Sie dazu auf den Link Configure Settings (erst für die Sandbox Keys, dann für die Production Keys) und dann im Bereich User Tokens auf den Link User Tokens. Der nächste Dialog informiert Sie darüber, dass noch keine User Tokens erzeugt wurden, und bietet dementsprechend einen Link namens Generate Token an.

Dieser führt Sie überraschenderweise zu einem Anmeldedialog, den Sie wahrscheinlich in deutscher Sprache schon einmal gesehen haben - mit dem Unterschied, dass dort kein Titel wie Sign in to link your eBay account to <Firmenname> steht. Der Token wird nämlich im Kontext eines existierenden Benutzers vergeben.

Wenn Sie gerade einen User Token für den Sandbox-Betrieb erstellen möchten (davon zeugt in diesem Fall die URL signin.sandbox.ebay.com), müssen Sie zunächst einen Benutzer anlegen, in dessen Kontext Sie dann den User Token erstellen. Das gelingt am schnellsten über einen Mausklick auf die Schaltfläche Register und anschließendes Eintragen der gewünschten Daten. Prinzipiell legen Sie nun einen gewöhnlichen Benutzer an - mit der Besonderheit, dass dieser nur in der Sandbox tätig werden darf.

Wenn Sie den User Token für die produktive Umgebung erstellen möchten, brauchen Sie ebenfalls einen eBay-Account - diesmal allerdings einen, der auch in der realen Welt kaufen und verkaufen darf.

Nach dem Anmelden mit dem Sandbox- oder Production-Account erscheint nicht etwa die übliche Begrüßung durch eBay, sondern ein weiterer Dialog, der nach einer Bestätigung für das Erstellen des User Tokens im Kontext der für die Anmeldung verwendeten Benutzerdaten verlangt. Der nächste Dialog liefert dann die benötigten Schlüssel und den User Token im Überblick (s. Abb. 3).

Optionen-Tabelle

Wohin nun mit den gewonnenen Informationen? Immerhin werden Sie diese in den folgenden Beispielen gelegentlich benötigen und wollen sie nicht immer wieder von der Account-Webseite kopieren. Keine Frage: Als Access-Entwickler erstellen Sie natürlich auf die Schnelle eine kleine Tabelle zum Speichern von Optionen. Dies geschieht oft in der Form, dass eine Tabelle nur die beiden Felder Optionsname und Optionswert enthält und jeder Datensatz ein Wertepaar aufnimmt. Sie können natürlich auch eine Tabelle erstellen, in der jedes Feld eine Option aufnimmt. Da die Anzahl der Optionen in diesem Fall konstant ist, kommt diese Variante hier zum Einsatz. Die Tabelle sieht in der Entwurfsansicht so aus wie in Abb. 4. Für die einfache Verwaltung dieser Informationen legen Sie ein Formular wie in Abb. 5 an.

pic003.png

Abb. 3: Schlüssel und User Token

pic004.png

Abb. 4: Tabelle mit den für den Zugriff auf die eBay-Webservices nötigen Daten

pic005.png

Abb. 5: Formular für die Verwaltung der Accountdaten

Für die spätere Verwendung der in der Tabelle tblOptionen gespeicherten Werte legen Sie vier kleine Funktionen an, die in Abhängigkeit vom Wert des Felds Sandbox entweder den Sandbox- oder den Production-Wert der gefragten Option zurückliefern. Diese Routine sieht beispielsweise so aus:

Public Function GetAppID() As String

    If DLookup("Sandbox", "tblOptionen") = 1 Then

        GetAppID = Nz(DLookup("AppID_Sandbox", _

        "tblOptionen"), "")

    Else

        GetAppID = Nz(DLookup( _

        "AppID_Production", _

        "tblOptionen"), "")

    End If

End Function

Ob Sie im Sandbox- oder im Production-Modus arbeiten, stellen Sie mit der entsprechenden Optionsgruppe im Formular frmOptionen ein; die Funktionen GetAppID, GetCertID, GetDevID und GetUserToken liefern dann jeweils den dafür vorgesehenen Schlüssel beziehungsweise Token.

Damit ausgerüstet können wir uns nun dem eigentlichen Ziel dieses Beitrags zuwenden: Dem Fernsteuern von eBay mittels Access-Anwendung und Webservice.

Artikel suchen

Die wohl meistgenutzte Funktion ist das Suchen von Artikeln. Damit Sie nicht denken, alles sei so einfach wie nachfolgend dargestellt, weisen wir an dieser Stelle darauf hin, dass es durchaus mehrere Möglichkeiten gibt, um die eBay-Artikel nach bestimmten Merkmalen zu durchsuchen.

So gibt es beispielsweise zwei unabhängige APIs namens Trading-API und Shopping-API (es gibt noch mehr, aber die sind in diesem Kontext eher uninteressant). Wir konzentrieren uns auf die Shopping-API, weil sie alle Anforderungen für die nachfolgenden Beispiele erfüllt.

Zusammensetzen der Anfrage-URL

Die URL zum Übermitteln der Anfrage an den eBay-Webservice setzt sich aus der eigentlichen Webadresse sowie aus den Parametern zusammen, die jeweils aus Parameter-Wertpaaren bestehen. Parameter und Wert trennt jeweils ein Gleichheitszeichen, die einzelnen Parameter-Wertpaare hält man durch das Kaufmanns-Und auseinander.

Es gibt jeweils einige Pflichtparameter und solche Parameter, welche den eigentlichen API-Aufruf betreffen. Informationen über die Pflichtparameter finden Sie in Kurzform in Tab. 1 sowie in ausführlicher Fassung unter [1].

Parameter

Beschreibung

appid

Einer der Schlüssel, den man nach der Anmeldung beim Developer-Programm erhält

callname

Name der API-Funktion

siteid

eBay-Seite, die aufgerufen werden soll - zum Beispiel 77 für die deutsche oder 0 für die amerikanische Variante. Letztere sollten Sie beim Spielen im Sandkasten verwenden, weil dort sonst Probleme auftreten können.

version

Version der API, die Ihre Anwendung verwendet. eBay entwickelt die APIs weiter. Damit Ihre Anwendung kompatibel mit dem bei Erstellung vorhandenen Stand bleibt, müssen Sie die entsprechende Version angeben.

responseencoding

Form, in der eBay die Antwort zurückliefert, in den Beispielen dieses Artikels XML.

Tab. 1: Einige der Parameter beim Aufruf von Funktionen der Shopping-API

Die Basis-URL heißt http://open.api.ebay.com/shopping. Dahinter fügen Sie, getrennt durch ein Fragezeichen (?), die Parameterliste ein.

Beginnen wir mit einem einfachen Suchauftrag nach allen Artikeln, die Access Entwicklerbuch im Namen führen. Dafür verwenden wir die API-Funktion FindItems, die in [2] mit allen Parametern erläutert wird.

Die URL sieht anschließend so aus:

http://open.api.ebay.com/shopping?

callname=FindItems&version=535&siteid=77&

appid=mossSOFT-xxxx-xxxx-xxxx-xxxxxxxxxxxx&

responseencoding=XML&

QueryKeywords=Access Entwicklerbuch

Die URL geben Sie im Browser ein und rufen die Seite auf. Das Ergebnis finden Sie in Abb. 6. Es sieht wenig erbaulich aus: Zwar enthält der Aufruf für den Parameter responseencoding den Wert XML, aber irgendwie sehen die Suchergebnisse der richtigen eBay-Anwendung doch besser aus.

pic006.png

Abb. 6: Das Ergebnis einer Abfrage mit bestimmten Suchbegriffen

XML-Antwort in lesbare Form bringen

Nun denn: Bringen wir ein wenig Licht ins Dunkel und lesen die relevanten Informationen aus diesem XML-Dokument heraus. Dazu brauchen Sie einen Verweis auf die Bibliothek Microsoft XML, v3.0 oder höher und ein wenig Grundkenntnisse in der Behandlung von XML-Dateien mit dem Document Object Model. Die finden Sie in konzentrierter Form im Beitrag XML-Dokumente mit VBA erstellen und lesen (Shortlink 522).

Webservice-Anfrage per VBA

Bevor wir uns auf den XML-Code der Antwort des Webservice stürzen, müssen wir diesen zunächst einmal in den (VBA-)Griff bekommen. Wie schicken wir die Anfrage an den Webservices, und wo speichern wir die Antwort?

Wer schon einmal unter VBA mit XML-Dokumenten gearbeitet hat, weiß, dass diese in einem Objekt des Typs DOMDocument gespeichert werden. Also deklarieren wir ein solches:

Dim objDocument As New MSXML2.DOMDocument

Die URL speichern wir in einer einfachen String-Variablen, die wir folgendermaßen deklarieren:

Dim strRequest As String

Für den Beginn soll die URL ganz einfach im Ganzen als Zeichenkette zugewiesen werden:

strRequest = "http://open.api.ebay.com/µ

shopping?callname=FindItemsµ

&version=535&siteid=77µ

&appid=mossSOFT-f3da-4585-a088-125f0728ec55µ

&responseencoding=XMLµ

&QueryKeywords=Access Entwicklerbuch"

Mit diesen beiden Werten füttern wir die kleine Funktion aus Listing 1, und zwar mit folgender, in eine If...Then-Abfrage verpackten Anweisung:

Listing 1: Ermitteln eines XML-Dokuments als Ergebnis einer Webservice-Anfrage

Public Function eBayRequest(strRequest As String, objResponse As MSXML2.DOMDocument) As Boolean

    With objResponse

    .async = False

    .preserveWhiteSpace = False

    .validateOnParse = True

    .resolveExternals = False

    End With

    eBayRequest = objResponse.Load(strRequest)

End Function

If eBayRequest(strRequest, objDocument) = _

True Then

Debug.Print objDocument.XML

Else

Debug.Print "Aufruf gescheitert."

End If

Die Funktion eBayRequest erledigt nichts anderes, als das übergebene DOMDocument-Objekt mit einigen Eigenschaften zu versehen - unter anderem die Request-URL - und das Ergebnis einzulesen. Dieses gibt die aufrufende Routine dann über die Eigenschaft XML des Objekts objDocument im Direktfenster aus.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

eBay-Artikel einstellen mit Access

Globale Suche

Suchfunktionen von einfach bis komplex

Amazon Webservices per VBA nutzen

Twittern mit Access

© 2003-2015 André Minhorst Alle Rechte vorbehalten.