{"id":55000650,"date":"2009-02-01T00:00:00","date_gmt":"2020-05-22T22:21:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=650"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"eBayArtikelsuche_mit_Access","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/","title":{"rendered":"eBay-Artikelsuche mit Access"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/98f84644525b4650b5f2be3cc56ebeef\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Access steuert alles fern, was nicht bei Drei auf dem n&auml;chsten Baum ist &#8211; 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<span class=\"todo\"> <\/span>zur&uuml;ck. Der von eBay bietet alle M&ouml;glichkeiten, die auch die Benutzeroberfl&auml;che im Browser liefert &#8211; und mehr. So k&ouml;nnen Sie den Webservice beispielsweise dazu nutzen, Artikel aus der Tabelle einer Warenwirtschaft in einem Rutsch online zu stellen. In diesem Beitrag besch&auml;ftigen wir uns jedoch erstmal mit der Suche nach Artikeln.<\/b><\/p>\n<p>Wer schon einmal mit Webservices kommuniziert hat, kennt die eine oder andere Methode, mit der man dies erledigt. Die einfachste hei&szlig;t REST und liefert auf eine HTTP-Anfrage, deren Parameter die Anfragedetails enthalten, ein XML-Dokument als Antwort.<\/p>\n<p>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&auml;sst: Sie brauchen dazu nur die URL in den Browser einzutippen und erhalten direkt die passende Antwort im XML-Format.<\/p>\n<p>REST ist allerdings kein Allheilmittel: Wer Artikel bei eBay einstellen m&ouml;chte, wird schnell feststellen, dass eine URL-Zeile schnell unhandlich wird. An dieser Stelle versendet man seine Anfrage dann doch lieber als XML-Request.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Nur f&uuml;r Developer<\/p>\n<p>F&uuml;r den Zugriff auf die Webservices von eBay brauchen Sie in der Regel einen Developer-Account. Als Ausgangspunkt f&uuml;r das Anlegen eines solchen Kontos dient die Webadresse <b>http:\/\/developer.ebay.com\/<\/b>. Hier klicken Sie auf den gro&szlig;en <b>Join Now!<\/b>-Link und gelangen zum Formular aus Bild 1, dem Sie Ihre Daten anvertrauen m&uuml;ssen, um an einen eBay-Developer-Account zu gelangen. Was Sie hier mitnehmen, ist die Developer-User-ID und Ihr Kennwort.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic001_opt.jpeg\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Anlegen eines eBay-Developer-Accounts<\/span><\/b><\/p>\n<p>Nach dem Registrieren landen Sie auf Ihrer Account-Page, von wo aus Sie alle weiteren Schritte durchf&uuml;hren k&ouml;nnen, die f&uuml;r den Zugriff auf den eBay-Webservice n&ouml;tig sind (siehe Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic002_opt.jpeg\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Die Steuerzentrale f&uuml;r eBay-Developer<\/span><\/b><\/p>\n<p>Im Bereich <b>application keys <\/b>k&ouml;nnen Sie nun zwei S&auml;tze von Schl&uuml;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&uuml;gung stellt. Das zweite Paar verschafft Ihnen Zutritt zur echten eBay-Welt.<\/p>\n<p>Ein Klick auf <b>generate sandbox keys <\/b>erstellt die drei Schl&uuml;ssel <b>DEVID<\/b>, <b>AppID <\/b>und <b>CertID <\/b>in Form von GUIDs und zeigt diese direkt in Ihrer Schaltzentrale an. Mit der Schaltfl&auml;che <b>generate production keys <\/b>beschaffen Sie sich den Schl&uuml;sselsatz f&uuml;r den produktiven Betrieb.<\/p>\n<p>Nun fehlen nur noch wenige Details und Sie k&ouml;nnen den ersten Zugriff starten (genaugenommen k&ouml;nnten Sie das schon jetzt &#8211; aber wenn wir schon einmal dabei sind &#8230;): Klicken Sie dazu auf den Link <b>Configure Settings <\/b>(erst f&uuml;r die <b>Sandbox Keys<\/b>, dann f&uuml;r die <b>Production Keys<\/b>) und dann im Bereich <b>User Tokens <\/b>auf den Link <b>User Tokens<\/b>. Der n&auml;chste Dialog informiert Sie dar&uuml;ber, dass noch keine User Tokens erzeugt wurden, und bietet dementsprechend einen Link namens <b>Generate Token <\/b>an.<\/p>\n<p>Dieser f&uuml;hrt Sie &uuml;berraschenderweise zu einem Anmeldedialog, den Sie wahrscheinlich in deutscher Sprache schon einmal gesehen haben &#8211; mit dem Unterschied, dass dort kein Titel wie <b>Sign in to link your eBay account to &lt;Firmenname&gt;<\/b> steht. Der Token wird n&auml;mlich im Kontext eines existierenden Benutzers vergeben.<\/p>\n<p>Wenn Sie gerade einen User Token f&uuml;r den Sandbox-Betrieb erstellen m&ouml;chten (davon zeugt in diesem Fall die URL <b>signin.sandbox.ebay.com<\/b>), m&uuml;ssen Sie zun&auml;chst einen Benutzer anlegen, in dessen Kontext Sie dann den User Token erstellen. Das gelingt am schnellsten &uuml;ber einen Mausklick auf die Schaltfl&auml;che <b>Register <\/b>und anschlie&szlig;endes Eintragen der gew&uuml;nschten Daten. Prinzipiell legen Sie nun einen gew&ouml;hnlichen Benutzer an &#8211; mit der Besonderheit, dass dieser nur in der Sandbox t&auml;tig werden darf.<\/p>\n<p>Wenn Sie den User Token f&uuml;r die produktive Umgebung erstellen m&ouml;chten, brauchen Sie ebenfalls einen eBay-Account &#8211; diesmal allerdings einen, der auch in der realen Welt kaufen und verkaufen darf.<\/p>\n<p>Nach dem Anmelden mit dem Sandbox- oder Production-Account erscheint nicht etwa die &uuml;bliche Begr&uuml;&szlig;ung durch eBay, sondern ein weiterer Dialog, der nach einer Best&auml;tigung f&uuml;r das Erstellen des User Tokens im Kontext der f&uuml;r die Anmeldung verwendeten Benutzerdaten verlangt. Der n&auml;chste Dialog liefert dann die ben&ouml;tigten Schl&uuml;ssel und den User Token im &Uuml;berblick (siehe Bild 3).<\/p>\n<p><b>Optionen-Tabelle<\/b><\/p>\n<p>Wohin nun mit den gewonnenen Informationen Immerhin werden Sie diese in den folgenden Beispielen gelegentlich ben&ouml;tigen und wollen sie nicht immer wieder von der Account-Webseite kopieren. Keine Frage: Als Access-Entwickler erstellen Sie nat&uuml;rlich auf die Schnelle eine kleine Tabelle zum Speichern von Optionen. Dies geschieht oft in der Form, dass eine Tabelle nur die beiden Felder <b>Optionsname <\/b>und <b>Optionswert <\/b>enth&auml;lt und jeder Datensatz ein Wertepaar aufnimmt. Sie k&ouml;nnen nat&uuml;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 Bild 4. F&uuml;r die einfache Verwaltung dieser Informationen legen Sie ein Formular wie in Bild 5 an.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic003_opt.jpeg\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Schl&uuml;ssel und User Token<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic004_opt.jpeg\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Tabelle mit den f&uuml;r den Zugriff auf die eBay-Webservices n&ouml;tigen Daten<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic005_opt.jpeg\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Formular f&uuml;r die Verwaltung der Accountdaten<\/span><\/b><\/p>\n<p>F&uuml;r die sp&auml;tere Verwendung der in der Tabelle <b>tblOptionen<\/b> gespeicherten Werte legen Sie vier kleine Funktionen an, die in Abh&auml;ngigkeit vom Wert des Felds <b>Sandbox<\/b> entweder den Sandbox- oder den Production-Wert der gefragten Option zur&uuml;ckliefern. Diese Routine sieht beispielsweise so aus:<\/p>\n<pre>Public Function GetAppID() As String\r\n    If DLookup(&quot;Sandbox&quot;, &quot;tblOptionen&quot;) = 1 Then\r\n        GetAppID = Nz(DLookup(&quot;AppID_Sandbox&quot;, _\r\n        &quot;tblOptionen&quot;), &quot;&quot;)\r\n    Else\r\n        GetAppID = Nz(DLookup( _\r\n        &quot;AppID_Production&quot;, _\r\n        &quot;tblOptionen&quot;), &quot;&quot;)\r\n    End If\r\nEnd Function<\/pre>\n<p>Ob Sie im Sandbox- oder im Production-Modus arbeiten, stellen Sie mit der entsprechenden Optionsgruppe im Formular <b>frmOptionen <\/b>ein; die Funktionen <b>GetAppID<\/b>, <b>GetCertID<\/b>, <b>GetDevID <\/b>und <b>GetUserToken <\/b>liefern dann jeweils den daf&uuml;r vorgesehenen Schl&uuml;ssel beziehungsweise Token.<\/p>\n<p>Damit ausger&uuml;stet k&ouml;nnen wir uns nun dem eigentlichen Ziel dieses Beitrags zuwenden: Dem Fernsteuern von eBay mittels Access-Anwendung und Webservice.<\/p>\n<p><b>Artikel suchen<\/b><\/p>\n<p>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&ouml;glichkeiten gibt, um die eBay-Artikel nach bestimmten Merkmalen zu durchsuchen.<\/p>\n<p>So gibt es beispielsweise zwei unabh&auml;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&uuml;r die nachfolgenden Beispiele erf&uuml;llt.<\/p>\n<p><b>Zusammensetzen der Anfrage-URL<\/b><\/p>\n<p>Die URL zum &Uuml;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&auml;lt man durch das Kaufmanns-Und auseinander.<\/p>\n<p>Es gibt jeweils einige Pflichtparameter und solche Parameter, welche den eigentlichen API-Aufruf betreffen. Informationen &uuml;ber die Pflichtparameter finden Sie in Kurzform in Tab. 1 sowie in ausf&uuml;hrlicher Fassung unter [1].<\/p>\n<table class=\"table-style-2\">\n<thead>\n<tr>\n<td>\n<p class=\"tabellekopfzeile\">Parameter<\/p>\n<\/td>\n<td>\n<p class=\"tabellekopfzeile\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"aiu-zeile1\">\n<\/td>\n<td class=\"aiu-zeile1\">\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 1: Einige der Parameter beim Aufruf von Funktionen der Shopping-API<\/span><\/b><\/p>\n<p>Die Basis-URL hei&szlig;t <b>http:\/\/open.api.ebay.com\/shopping<\/b>. Dahinter f&uuml;gen Sie, getrennt durch ein Fragezeichen (), die Parameterliste ein.<\/p>\n<p>Beginnen wir mit einem einfachen Suchauftrag nach allen Artikeln, die<b> Access Entwicklerbuch <\/b>im Namen f&uuml;hren. Daf&uuml;r verwenden wir die API-Funktion <b>FindItems<\/b>, die in [2] mit allen Parametern erl&auml;utert wird.<\/p>\n<p>Die URL sieht anschlie&szlig;end so aus:<\/p>\n<pre>http:\/\/open.api.ebay.com\/shopping\r\ncallname=FindItems&amp;version=535&amp;siteid=77&amp;\r\nappid=mossSOFT-xxxx-xxxx-xxxx-xxxxxxxxxxxx&amp;\r\nresponseencoding=XML&amp;\r\nQueryKeywords=Access Entwicklerbuch<\/pre>\n<p>Die URL geben Sie im Browser ein und rufen die Seite auf. Das Ergebnis finden Sie in Bild 6. Es sieht wenig erbaulich aus: Zwar enth&auml;lt der Aufruf f&uuml;r den Parameter <b>responseencoding <\/b>den Wert <b>XML<\/b>, aber irgendwie sehen die Suchergebnisse der richtigen eBay-Anwendung doch besser aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic006_opt.jpeg\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Das Ergebnis einer Abfrage mit bestimmten Suchbegriffen<\/span><\/b><\/p>\n<p><b>XML-Antwort in lesbare Form bringen<\/b><\/p>\n<p>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 <b>Microsoft XML, v3.0 <\/b>oder h&ouml;her und ein wenig Grundkenntnisse in der Behandlung von XML-Dateien mit dem <b>Document Object Model<\/b>. Die finden Sie in konzentrierter Form im Beitrag <b>XML-Dokumente mit VBA erstellen und lesen <\/b>(Shortlink 522).<\/p>\n<p><b>Webservice-Anfrage per VBA<\/b><\/p>\n<p>Bevor wir uns auf den XML-Code der Antwort des Webservice st&uuml;rzen, m&uuml;ssen wir diesen zun&auml;chst einmal in den (VBA-)Griff bekommen. Wie schicken wir die Anfrage an den Webservices, und wo speichern wir die Antwort<\/p>\n<p>Wer schon einmal unter VBA mit XML-Dokumenten gearbeitet hat, wei&szlig;, dass diese in einem Objekt des Typs <b>DOMDocument <\/b>gespeichert werden. Also deklarieren wir ein solches:<\/p>\n<pre>Dim objDocument As New MSXML2.DOMDocument<\/pre>\n<p>Die URL speichern wir in einer einfachen String-Variablen, die wir folgenderma&szlig;en deklarieren:<\/p>\n<pre>Dim strRequest As String<\/pre>\n<p>F&uuml;r den Beginn soll die URL ganz einfach im Ganzen als Zeichenkette zugewiesen werden:<\/p>\n<pre>strRequest = &quot;http:\/\/open.api.ebay.com\/&micro;\r\nshoppingcallname=FindItems&micro;\r\n&amp;version=535&amp;siteid=77&micro;\r\n&amp;appid=mossSOFT-f3da-4585-a088-125f0728ec55&micro;\r\n&amp;responseencoding=XML&micro;\r\n&amp;QueryKeywords=Access Entwicklerbuch&quot;<\/pre>\n<p>Mit diesen beiden Werten f&uuml;ttern wir die kleine Funktion aus Listing 1, und zwar mit folgender, in eine <b>If&#8230;Then<\/b>-Abfrage verpackten Anweisung:<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Ermitteln eines XML-Dokuments als Ergebnis einer Webservice-Anfrage<\/p>\n<pre>Public Function eBayRequest(strRequest As String, objResponse As MSXML2.DOMDocument) As Boolean\r\n    With objResponse\r\n    .async = False\r\n    .preserveWhiteSpace = False\r\n    .validateOnParse = True\r\n    .resolveExternals = False\r\n    End With\r\n    eBayRequest = objResponse.Load(strRequest)\r\nEnd Function\r\nIf eBayRequest(strRequest, objDocument) = _\r\nTrue Then\r\nDebug.Print objDocument.XML\r\nElse\r\nDebug.Print &quot;Aufruf gescheitert.&quot;\r\nEnd If<\/pre>\n<p><!--30percent--><\/p>\n<p>Die Funktion <b>eBayRequest <\/b>erledigt nichts anderes, als das &uuml;bergebene <b>DOMDocument<\/b>-Objekt mit einigen Eigenschaften zu versehen &#8211; unter anderem die Request-URL &#8211; und das Ergebnis einzulesen. Dieses gibt die aufrufende Routine dann &uuml;ber die Eigenschaft <b>XML <\/b>des Objekts <b>objDocument <\/b>im Direktfenster aus.<\/p>\n<p><b>Suchergebnis auswerten<\/b><\/p>\n<p>Da wir nun ein brauchbares Ergebnis im XML-Format haben, werten wir dieses gleich per VBA aus. <\/p>\n<p>Das Root-Element des Ergebnisses hei&szlig;t <b>FindItemsResponse <\/b>und enth&auml;lt neben einigen allgemeinen Informationen wie dem <b>Timestamp <\/b>die eigentlichen Artikelinformationen, die jeweils in einem eigenen <b>Item<\/b>-Element untergebracht sind. Um die Eigenschaften der einzelnen Elemente zu ermitteln, m&uuml;ssen Sie diese per VBA-Code durchlaufen und die gew&uuml;nschten Informationen abfragen.<\/p>\n<p>Dies erledigt, in einfacher Form, die Funktion <b>PrintArticles<\/b>. Sie erwartet lediglich das XML-Dokument in Form der Objektvariablen <b>objDocument <\/b>als Parameter und wertet einige seiner Elemente aus. Dazu deklariert sie zwei Variablen des Typs <b>IXMLDOMNode<\/b>. Das erste soll das Root-Element des Dokuments aufnehmen, also das Element <b>FindItemsResponse<\/b>. Einen Verweis auf das Root-Element erh&auml;lt man ganz einfach &uuml;ber die Eigenschaft <b>documentElement <\/b>des XML-Dokuments.<\/p>\n<p class=\"kastentabelleheader\">Listing 2: Ausgabe der ermittelten Artikel<\/p>\n<pre>Public Function PrintArticles(objDocument As MSXML2.DOMDocument) As Boolean\r\nDim objRoot As MSXML2.IXMLDOMNode\r\nDim objItem As MSXML2.IXMLDOMNode\r\nSet objRoot = objDocument.documentElement\r\nDebug.Print &quot;Anzahl Items: &quot; &amp; objRoot.selectNodes(&quot;Item&quot;).length\r\nFor Each objItem In objRoot.selectNodes(&quot;Item&quot;)\r\nDebug.Print objItem.selectSingleNode(&quot;ItemID&quot;).nodeTypedValue, _\r\nobjItem.selectSingleNode(&quot;Title&quot;).nodeTypedValue\r\nNext objItem\r\nEnd Function<\/pre>\n<p>Dieses Element wiederum enth&auml;lt die <b>Item<\/b>-Elemente, von denen jedes genau einen Artikel repr&auml;sentiert. Mit der Abfrage <b>selectNodes(&quot;Item&quot;) <\/b>des Root-Elements erhalten Sie eine Referenz auf die Auflistung aller im Root-Element enthaltenen Elemente namens <b>Item<\/b>. Die Eigenschaft <b>length <\/b>dieser Auflistung liefert die Anzahl der Eintr&auml;ge.<\/p>\n<p>&Uuml;ber eine <b>For Each<\/b>-Schleife durchl&auml;uft die Routine alle Eintr&auml;ge und ermittelt weitere Unterelemente, n&auml;mlich <b>ItemID <\/b>(dies entspricht der Artikelnummer bei eBay) und <b>Title<\/b>, also den &Uuml;berschriftstext, den Sie bei eBay zu jedem Artikel finden. Die Eigenschaft <b>nodeTypedValue <\/b>f&ouml;rdert den Inhalt von <b>ItemID <\/b>und <b>Title <\/b>zu Tage, was zu einem Ergebnis wie dem folgenden f&uuml;hrt:<\/p>\n<pre>Anzahl Items: 3\r\n120339177375 ANDRE MINHORST: Das Access 2003 &micro;\r\nEntwicklerbuch\r\n220322044300 Das Access 2003 Entwicklerbuch - &micro;\r\nAndre Minh(Kein Porto)\r\n390015315509 Das Access 2003 Entwicklerbuch - &micro;\r\nAndre Minh(Kein Porto)<\/pre>\n<p>Ihnen als Leser von Access im Unternehmen brauchen wir nicht zu erkl&auml;ren, wie Sie diese Informationen statt ins Direktfenster direkt in eine Tabelle der Datenbank schreiben &#8211; stattdessen widmen wir uns interessanteren API-Funktionen.<\/p>\n<p><b>Erweiterte Suche<\/b><\/p>\n<p>Die einfache Suche mit der API-Funktion <b>FindItems <\/b>hat einen gro&szlig;en Nachteil: Sie k&ouml;nnen damit eine Ergebnismenge mit maximal 50 Eintr&auml;gen zur&uuml;ckliefern, aber nicht mehr und damit in vielen F&auml;llen nicht alle Ergebnisse. Au&szlig;erdem k&ouml;nnen Sie damit die im Ergebnis enthaltenen Informationen nicht beeinflussen.<\/p>\n<p>Beides erledigen Sie mit der API-Funktion <b>FindItemsAdvanced<\/b>, zu der Sie unter [3] weitere Informationen erhalten. Diese Funktion liefert zwar auch nur maximal 100 Artikel je Ergebnis, aber sie akzeptiert einen Parameter namens <b>PageNumber<\/b>, mit dem Sie <b>FindItemAdvanced<\/b>, falls es mehr als die angegebene Anzahl Ergebnisse je Seite enth&auml;lt, auch die &uuml;brigen Ergebnisseiten entlocken k&ouml;nnen.<\/p>\n<p>Wie dies funktioniert, zeigt die Routine aus Listing 3. Sie verwendet die API-Funktion <b>FindItemsAdvanced<\/b>, um auch &uuml;ber mehrere Seiten verteilte Ergebnismengen zu ermitteln.<\/p>\n<p class=\"kastentabelleheader\">Listing 3: Beispiel f&uuml;r das Ermitteln mehrseitiger Ergebnislisten mit FindItemsAdvanced<\/p>\n<pre>Public Function FindItemsAdvanced(strKeywords As String)\r\n    Dim objDocument As New MSXML2.DOMDocument\r\n    Dim objXMLItems As MSXML2.IXMLDOMElement\r\n    Dim strIncludeSelector As String\r\n    Dim intPageNumber As Integer\r\n    Dim intTotalPages As Integer\r\n    Dim lngTotalItems As Long\r\n    Dim i As Integer\r\n    Dim strRequestPage As String\r\n    Dim strRequest As String\r\n    Dim strCallname As String\r\n    Dim strItemSort As String\r\n    Dim strItemType As String\r\n    Dim intMaxEntries As Integer\r\n    strCallname = &quot;FindItemsAdvanced&quot;\r\n    strItemSort = &quot;BestMatch&quot;\r\n    strItemType = &quot;AllItemTypes&quot;\r\n    strIncludeSelector = &quot;Details&quot;\r\n    intMaxEntries = 10\r\n    strRequest = &quot;http:\/\/open.api.ebay.com\/shoppingcallname=&quot; &amp; strCallname _\r\n    &amp; &quot;&amp;ItemSort=&quot; &amp; strItemSort &amp; &quot;&amp;version=&quot; &amp; GetVersion &amp; &quot;&amp;siteid=&quot; &amp; GetSiteID _\r\n    &amp; &quot;&amp;appid=&quot; &amp; GetAppID &amp; &quot;&amp;responseencoding=XML&amp;ItemType=&quot; &amp; strItemType _\r\n    &amp; &quot;&amp;IncludeSelector=&quot; &amp; strIncludeSelector &amp; &quot;&amp;QueryKeywords=&quot; &amp; strKeywords _\r\n    &amp; &quot;&amp;MaxEntries=&quot; &amp; intMaxEntries\r\n    If eBayRequest(strRequest, objDocument) = False Then\r\n        MsgBox &quot;Der Request ist fehlerhaft.&quot;\r\n        Exit Function\r\n    Else\r\n        If objDocument.selectSingleNode(&quot;FindItemsAdvancedResponse\/TotalItems&quot;).nodeTypedValue = 0 Then\r\n            MsgBox &quot;Es wurden keine Artikel gefunden.&quot;\r\n            Exit Function\r\n        End If\r\n    End If\r\n    Do\r\n        With objDocument\r\n        intPageNumber = .selectSingleNode(&quot;FindItemsAdvancedResponse\/PageNumber&quot;).nodeTypedValue\r\n        intTotalPages = .selectSingleNode(&quot;FindItemsAdvancedResponse\/TotalPages&quot;).nodeTypedValue\r\n        Set objXMLItems = .selectSingleNode(&quot;FindItemsAdvancedResponse\/SearchResult\/ItemArray&quot;)\r\n        For i = 0 To objXMLItems.childNodes.length - 1\r\n            ItemVerarbeiten objXMLItems.childNodes(i)\r\n        Next i\r\n        End With\r\n        If intPageNumber &lt; intTotalPages Then\r\n            intPageNumber = intPageNumber + 1\r\n            strRequestPage = strRequest &amp; &quot;&amp;PageNumber=&quot; &amp; intPageNumber\r\n            eBayRequest strRequestPage, objDocument\r\n        End If\r\n    Loop Until intPageNumber = intTotalPages\r\nEnd Function<\/pre>\n<p>Die Funktion ist so ausgelegt, dass Sie beim Aufruf lediglich die Suchbegriffe &uuml;bergeben m&uuml;ssen, also etwa so:<\/p>\n<pre>FindItemsAdvanced &quot;Access 2007&quot;<\/pre>\n<p>Sie k&ouml;nnten die Funktion noch flexibler gestalten, indem Sie weitere Parameter in den Aufruf verlegen, aber f&uuml;r Beispielzwecke reicht dieser eine Parameter aus.<\/p>\n<p>Die Routine <b>FindItemsAdvanced <\/b>deklariert zun&auml;chst einige Variablen und weist dann die Werte f&uuml;r einige bei der Suche verwendete Parameter zu:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>strCallname<\/b>: Der Name der verwendeten API-Funktion, hier <b>FindItemsAdvanced<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>strItemSort<\/b>: Sortierung der Artikel, hier <b>BestMatch<\/b>. Weitere Werte finden Sie unter [4].<\/li>\n<li class=\"aufz-hlung\"><b>strItemType<\/b>: Art der Artikel, zum Beispiel solche, die versteigert werden oder nur im Shop eines Anbieters erh&auml;ltlich sind. Das hier verwendete <b>AllItemTypes <\/b>liefert alle Typen. Weitere Werte finden Sie unter [5].<\/li>\n<li class=\"aufz-hlung\"><b>strIncludeSelector<\/b>: Legt fest, wie detailliert die Informationen zu jedem Artikel ausfallen. Der hier gew&auml;hlte Wert <b>Details<\/b> liefert alle Werte, welche die Performance nicht allzu sehr beeinflussen. Alle m&ouml;glichen Werte finden Sie unter [6].<\/li>\n<li class=\"aufz-hlung\"><b>intMaxEntries<\/b>: Gibt an, wie viele Artikel je Seite zur&uuml;ckgeliefert werden sollen.<\/li>\n<\/ul>\n<p>Die Routine setzt nun zun&auml;chst den Request zusammen und speichert diesen in der Variablen <b>strRequest<\/b>. Einige der verwendeten Parameter stammen aus den oben beschriebenen Variablen, andere werden mit <b>Get&#8230;<\/b>-Funktionen aus der Tabelle <b>tblOptionen <\/b>eingelesen (wobei hier noch einige Werte mehr zum Einsatz kommen, also in der zu Beginn beschriebenen Fassung enthalten sind).<\/p>\n<p>Mit diesem Ausdruck und dem Objekt <b>objDocument <\/b>im Gep&auml;ck geht es dann zur bereits weiter oben beschriebenen Funktion <b>eBayRequest<\/b>, die bestenfalls ein gef&uuml;lltes XML-Dokument zur&uuml;ckliefert.<\/p>\n<p>Ist das der Fall, sieht das Ergebnis so wie in Bild 7 aus, wobei wir hier aus Gr&uuml;nden der &Uuml;bersichtlichkeit alle Artikel-Items bis auf einen entfernt haben. Zun&auml;chst geht es hier auch mehr um die Informationen, die sich am Ende des XML-Dokuments finden, und zwar die in den Elementen <b>PageNumber<\/b>, <b>TotalPages <\/b>und <b>TotalItems <\/b>enthaltenen Werte. <b>PageNumber <\/b>liefert dabei die aktuelle Seite, die mit unserem Aufruf aus <b>strRequest <\/b>immer <b>1 <\/b>ist, da kein anderer Wert &uuml;bergeben wurde. <b>TotalPages <\/b>zeigt die Anzahl der Seiten insgesamt an und <b>TotalItems <\/b>liefert die Anzahl der darin enthaltenen Artikel. Auch der &uuml;brige Aufbau unterscheidet sich von dem des Ergebnisses eines <b>FindItem<\/b>-Requests: Die gefundenen Items werden nicht direkt als Unterelemente des Root-Elements gef&uuml;hrt, sondern es liegen noch die zwei Ebenen <b>SearchResult <\/b>und <b>ItemArray <\/b>dazwischen. All dies muss man nat&uuml;rlich beim Auswerten des Ergebnisses beachten.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic007_opt.jpeg\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Ergebnis einer Abfrage mit der API-Funktion FindItemsAdvanced<\/span><\/b><\/p>\n<p>Die Funktion aus Listing 3 pr&uuml;ft zun&auml;chst, ob <b>eBayRequest<\/b> m&ouml;glicherweise den Wert <b>False <\/b>zur&uuml;ckliefert, was auf einen Misserfolg der Anfrage hindeutet. War die Anfrage erfolgreich, kann es aber immer noch sein, dass diese zwar ein XML-Dokument zur&uuml;cklieferte, dieses aber wiederum eine Fehlermeldung enth&auml;lt, weil beispielsweise kein Suchbegriff angegeben wurde. Das kann dann etwa so wie in Listing 4 aussehen. F&uuml;r diesen Fall haben wir die Funktion <b>eBayRequest <\/b>ein wenig erweitert: Sie pr&uuml;ft nun das Element <b>Ack<\/b>, das den Wert <b>Failure <\/b>aufweist, wenn es ein Problem mit dem Request gab, und gibt auch in diesem Fall den Wert <b>False <\/b>zur&uuml;ck.<\/p>\n<p class=\"kastentabelleheader\">Listing 4: Ergebnis eines Requests an den eBay-Webservice mit fehlerhafter Parameterliste<\/p>\n<pre>&lt;xml version=&quot;1.0&quot;&gt;\r\n&lt;FindItemsAdvancedResponse xmlns=&quot;urn:ebay:apis:eBLBaseComponents&quot;&gt;\r\n&lt;Timestamp&gt;2008-12-23T22:52:00.451Z&lt;\/Timestamp&gt;\r\n&lt;Ack&gt;Failure&lt;\/Ack&gt;\r\n&lt;Errors&gt;\r\n&lt;ShortMessage&gt;Geben Sie eine Abfrage ein!&lt;\/ShortMessage&gt;\r\n&lt;LongMessage&gt;Geben Sie eine Abfrage ein!&lt;\/LongMessage&gt;\r\n&lt;ErrorCode&gt;10.1&lt;\/ErrorCode&gt;\r\n&lt;SeverityCode&gt;Error&lt;\/SeverityCode&gt;\r\n&lt;ErrorClassification&gt;RequestError&lt;\/ErrorClassification&gt;\r\n&lt;\/Errors&gt;\r\n&lt;Build&gt;e595_core_Bundled_7641482_R1&lt;\/Build&gt;\r\n&lt;Version&gt;595&lt;\/Version&gt;\r\n&lt;\/FindItemsAdvancedResponse&gt;<\/pre>\n<p class=\"kastentabelleheader\">Listing 4: eBay-Request mit erweiterter Fehlerpr&uuml;fung<\/p>\n<pre>Public Function eBayRequest(strRequest As String, objResponse As MSXML2.DOMDocument) As Boolean\r\n    Dim bolSuccess As Boolean\r\n    Dim objRoot As MSXML2.IXMLDOMNode\r\n    Dim objAck As MSXML2.IXMLDOMNode\r\n    With objResponse\r\n    .async = False\r\n    .preserveWhiteSpace = False\r\n    .validateOnParse = True\r\n    .resolveExternals = False\r\n    End With\r\n    bolSuccess = objResponse.Load(strRequest)\r\n    If bolSuccess = True Then\r\n        Set objRoot = objResponse.documentElement\r\n        Set objAck = objRoot.selectSingleNode(&quot;Ack&quot;)\r\n        If objAck.nodeTypedValue = &quot;Failure&quot; Then\r\n            bolSuccess = False\r\n        End If\r\n    End If\r\n    eBayRequest = bolSuccess\r\nEnd Function<\/pre>\n<p>Wenn der Request ein XML-Dokument mit einer Items-Liste zur&uuml;ckgeliefert hat, pr&uuml;ft die Routine noch, ob das XML-Dokument auch Ergebnisse liefert. Falls nicht, verabschiedet es sich mit einem Meldungsfenster.<\/p>\n<p>In allen anderen F&auml;llen kommt die <b>Do&#8230;While<\/b>-Schleife aus Listing 3 ins Rollen. Diese l&auml;uft so lange, bis der Wert von <b>intPageNumber<\/b>, also der Nummer der aktuell gelieferten Seite, mit <b>intTotalPages<\/b>, also der Gesamtzahl der Seiten &uuml;bereinstimmt, wobei diese Pr&uuml;fung am Ende der Schleife stattfindet, denn die ben&ouml;tigten Werte werden erst innerhalb der Schleife zum ersten Mal ermittelt.<\/p>\n<p>Innerhalb der Schleife findet die Zuweisung von <b>PageNumber <\/b>und <b>TotalNumber <\/b>zu den entsprechenden Variablen statt und au&szlig;erdem schreibt die Routine den Teil des Ergebnisdokuments mit den eigentlichen Artikelinformationen in ein weiteres Objekt des Typs <b>IXMLDOMNode<\/b>, was zur weiteren Verarbeitung an die Routine <b>ItemVerarbeiten <\/b>gegeben wird.<\/p>\n<p>Diese Routine schauen wir uns im Anschluss an. Zun&auml;chst aber m&uuml;ssen wir noch die Frage kl&auml;ren, wie der Webservice erf&auml;hrt, welche Seite des Ergebnisses er liefern soll.<\/p>\n<p>Diese Funktion befindet sich in dem Teil, den die Zeile <b>If intPageNumber &lt; intTotalPages Then <\/b>einleitet.<\/p>\n<p>Sind wir noch nicht bei der letzten Seite angelangt, erh&ouml;ht die Routine hier <b>intPageNumber <\/b>um eins, wodurch diese Variable beim Verarbeiten der ersten Seite beispielsweise den Wert <b>2 <\/b>erh&auml;lt.<\/p>\n<p>Die n&auml;chste Zeile erzeugt einen neuen Request, der aus dem urspr&uuml;nglichen Request aus der Variablen <b>strRequest<\/b> und einem weiteren Parameter besteht, der in diesem Fall so lautet:<\/p>\n<pre>&amp;PageNumber=2<\/pre>\n<p>Damit ruft die Routine erneut <b>eBayRequest <\/b>auf, damit es das Antwortdokument f&uuml;r die jeweils folgende Seite des Requests liefert.<\/p>\n<p><b>Wohin damit<\/b><\/p>\n<p>Die Ergebnisse wollen Sie in irgendeiner Weise auswerten, um diese beispielsweise in einer Liste anzuzeigen und einen der enthaltenen Artikel auszuw&auml;hlen, um seine Detailbeschreibung bei eBay zu &ouml;ffnen. Dazu verwenden Sie eine Tabelle, deren Entwurf zu Beispielzwecken einfach gehalten ist und wie in Bild 8 aussieht.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic009_opt.jpeg\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Entwurfsansicht einer Tabelle zum Speichern von Suchergebnissen<\/span><\/b><\/p>\n<p>Das Formular aus Bild 9 enth&auml;lt die notwendigen Bedienelemente, um eine einfache Suche auszuf&uuml;hren. Diese akzeptiert drei Parameter:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic008_opt.jpeg\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Formular zur Anzeige von Suchergebnissen<\/span><\/b><\/p>\n<ul>\n<li class=\"aufz-hlung\">den Suchbegriff,<\/li>\n<li class=\"aufz-hlung\">die Anzahl der maximal zu ermittelnden Treffer sowie<\/li>\n<li class=\"aufz-hlung\">die Sortierung.<\/li>\n<\/ul>\n<p>Als Suchbegriff kann der Benutzer einen oder mehrere durch Leerzeichen getrennte Begriffe eingeben.<\/p>\n<p>Die Anzahl der ermittelten Treffer wirkt sich direkt auf die Dauer der ben&ouml;tigten Abfrage aus, daher sollte man diese klein halten und die interessanten Treffer durch die Wahl der richtigen Reihenfolge anvisieren.<\/p>\n<p><b>Suchformular<\/b><\/p>\n<p>Das Suchformular besteht aus einem Haupt- und einem Unterformular, wobei Letzteres lediglich die Suchergebnisse anzeigen soll. Dabei verwendet es die oben vorgestellte Tabelle <b>tblArtikel <\/b>als Datenherkunft.<\/p>\n<p>Die <b>Suchen<\/b>-Schaltfl&auml;che l&ouml;st die Routine aus Listing 5 aus. W&auml;hrend die Parameter aus den beiden Feldern <b>txtSuchbegriffe <\/b>und <b>txtAnzahl <\/b>reine Zeichenketten sind, w&auml;hlt der Benutzer die Reihenfolge mit einem Kombinationsfeld aus. Dieses ist beispielhaft mit drei m&ouml;glichen Werten in einer Wertliste gef&uuml;llt, die so aussieht:<\/p>\n<p class=\"kastentabelleheader\">Listing 5: Start der Suche nach Artikeln mit bestimmten Eigenschaften &uuml;ber die Suchen-Schaltfl&auml;che des Formulars frmArtikel<\/p>\n<pre>Private Sub cmdSuchen_Click()\r\n    Dim db As DAO.Database\r\n    Dim strSuchbegriffe As String\r\n    Dim intAnzahl As Integer\r\n    Dim strSortierung As String\r\n    Set db = CurrentDb\r\n    db.Execute &quot;DELETE FROM tblArtikel&quot;\r\n    strSuchbegriffe = Nz(Me.txtSuchbegriffe)\r\n    If Len(strSuchbegriffe) = 0 Then\r\n        MsgBox &quot;Bitte geben Sie einen Suchbegriff ein.&quot;\r\n        Exit Sub\r\n    End If\r\n    FindItemsAdvanced Me.txtSuchbegriffe, Me.txtAnzahl, Nz(Me.cboSortierung, &quot;&quot;)\r\n    Me.sfmSuche.Form.Requery\r\n    End Sub\r\n&quot;BestMatch&quot;;&quot;Beste Treffer&quot;;\r\n&quot;CurrentBid&quot;;&quot;Aktuelles Gebot&quot;;\r\n&quot;EndTime&quot;;&quot;Angebotsende&quot;<\/pre>\n<p>Sie k&ouml;nnen hier noch weitere Werte aufnehmen. Diese finden Sie in der Referenz der Shopping-API. Wenn Sie die Suchanfrage um weitere Parameter erweitern m&ouml;chten, finden Sie die m&ouml;glichen Werte am einfachsten, wenn Sie von der Referenz des jeweiligen Befehls, hier <b>FindItemsAdvanced<\/b>, starten und den ben&ouml;tigten Parameter suchen (hier <b>ItemSort<\/b>).<\/p>\n<p>Dort finden Sie einen Link zur Seite mit Details zu den entsprechenden Werten (siehe Bild 10).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/Ebay-web-images\/pic010_opt.jpeg\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Referenz zu Parametern von API-Funktionen<\/span><\/b><\/p>\n<p>In diesem Fall wurden die Parameter und aussagekr&auml;ftige Bezeichnungen in einer Wertliste zusammengefasst; wer m&ouml;chte, kann hierf&uuml;r nat&uuml;rlich auch direkt eine Tabelle mit allen m&ouml;glichen Werten erstellen.<\/p>\n<p>Nach dem Anklicken der <b>Suchen<\/b>-Schaltfl&auml;che wird der Suchbegriff 1:1 an die weiter oben vorgestellte Funktion <b>FindItemsAdvanced <\/b>weitergegeben, die wir allerdings f&uuml;r den Einsatz in diesem Formular noch ein wenig modifiziert haben: Der Funktionskopf enth&auml;lt n&auml;mlich noch zwei weitere Parameter, welche dem &Uuml;bermitteln der Anzahl der Treffer und der Suchreihenfolge dienen.<\/p>\n<p>Die Routine selbst enth&auml;lt ebenfalls einige zus&auml;tzliche Zeilen, von denen die meisten dazu dienen, Standardwerte f&uuml;r nicht &uuml;bergebene Parameter zu setzen.<\/p>\n<p>Interessant ist in diesem Zusammenhang die Verarbeitung der einzelnen <b>Item<\/b>-Elemente der Suchergebnisse. Die <b>For&#8230;Next<\/b>-Schleife, die in der obigen Variante der Funktion <b>FindItemAdvanced <\/b>lediglich den Aufruf der Funktion <b>ItemVerarbeiten <\/b>enthielt, wurde noch um eine Bedingung erweitert, die daf&uuml;r sorgt, dass nur so viele Items verarbeitet werden, wie der Benutzer als maximale Trefferanzahl angegeben hat:<\/p>\n<pre>For i = 0 To objXMLItems.childNodes.length - 1\r\nIf (intPageNumber - 1) * intMaxEntries + i _\r\n&gt; varCount - 1 Then\r\nExit Function\r\nEnd If\r\nItemVerarbeiten objXMLItems.childNodes(i)\r\nNext i<\/pre>\n<p>Die Funktion <b>ItemVerarbeiten <\/b>sieht nun wie in Listing 6 aus. Sie liest den Inhalt des Elements <b>Titel<\/b> aus, ersetzt dort Hochkommata durch doppelte Hochkommata, liest den Preis und die URL des Artikels bei eBay ein und schreibt das Ganze als Datensatz in die Tabelle <b>tblArtikel<\/b>. Nachdem dies alles geschehen ist, sorgt die letzte Anweisung aus Listing 5 daf&uuml;r, dass das Formular die aktuellen Datens&auml;tze anzeigt.<\/p>\n<p class=\"kastentabelleheader\">Listing 6: Diese Routine verarbeitet die einzelnen, in den Response-XML-Dokumenten enthaltenen Item-Elemente und speichert deren Daten in der Tabelle tblArtikel.<\/p>\n<pre>Public Function ItemVerarbeiten(objItem As MSXML2.IXMLDOMNode)\r\n    Dim db As DAO.Database\r\n    Dim strTitel As String\r\n    Dim sngPreis As Single\r\n    Dim strURL As String\r\n    Set db = CurrentDb\r\n    strTitel = objItem.selectSingleNode(&quot;Title&quot;).nodeTypedValue\r\n    strTitel = Replace(strTitel, &quot;&apos;&quot;, &quot;&apos;&apos;&quot;)\r\n    sngPreis = objItem.selectSingleNode(&quot;CurrentPrice&quot;).nodeTypedValue \/ 100\r\n    strURL = objItem.selectSingleNode(&quot;ViewItemURLForNaturalSearch&quot;).nodeTypedValue\r\n    db.Execute &quot;INSERT INTO tblArtikel(Titel, Preis, URL) VALUES(&apos;&quot; &amp; strTitel &amp; &quot;&apos;, &quot; _\r\n    &amp; Replace(sngPreis, &quot;,&quot;, &quot;.&quot;) &amp; &quot;, &apos;&quot; &amp; strURL &amp; &quot;&apos;)&quot;, dbFailOnError\r\nEnd Function<\/pre>\n<p>Die Schaltfl&auml;che <b>Bei eBay anzeigen <\/b>f&uuml;hrt schlie&szlig;lich die folgende Routine aus und zeigt damit den Artikel bei eBay in einer neuen Instanz des aktuellen Standardbrowsers an:<\/p>\n<pre>Private Sub cmdAnzeigen_Click()\r\nApplication.FollowHyperlink _\r\nMe.sfmSuche.Form!url\r\nEnd Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dies war nur ein kleiner Einblick in die Welt der eBay-Webservices. Immerhin haben Sie nun schon die Grundlage f&uuml;r den weiteren Zugriff geschaffen, indem Sie einen Benutzer angelegt und Schl&uuml;ssel f&uuml;r den Einsatz in der Sandbox von eBay und in der produktiven Umgebung erzeugt haben. Au&szlig;erdem wissen Sie nun, wie Sie per REST auf die Shopping-API von eBay zugreifen, um beispielsweise nach Artikeln zu suchen und deren Eigenschaften auszulesen.<\/p>\n<p>Es gibt aber noch viel mehr, was sich mit den eBay-Webservices anstellen l&auml;sst. Wenn man sich umh&ouml;rt, gibt es beispielsweise nicht wirklich viele Leute, denen es Spa&szlig; macht, Artikel bei eBay einzustellen.<\/p>\n<p>In einem weiteren Beitrag zeigen wir Ihnen daher, wie Sie die hier begonnene Beispieldatenbank mit ein wenig Kreativit&auml;t und der API-Referenz von eBay um weitere Funktionen erg&auml;nzen, mit der Sie Artikel einstellen k&ouml;nnen. Dazu ist eine Menge mehr n&ouml;tig als f&uuml;r das pure Suchen nach Artikeln. Die M&ouml;glichkeiten von REST sind hier begrenzt und Sie m&uuml;ssen Ihre Anfragen selbst in geeigneten XML-Requests formulieren.<\/p>\n<p>Nun denn: Wem der vorliegende Beitrag gefallen hat, der st&uuml;rzt sich am besten direkt auf den folgenden, und wer mit dem Thema eBay nur wenig anfangen kann, sollte trotzdem weiterlesen, weil er dort eine ganze Reihe Techniken zum Erstellen und Auslesen von XML-Dokumenten kennenlernen kann.<\/p>\n<p class=\"zwischen-berschriftquellen\">Links<\/p>\n<p class=\"quellen\">[1] Informationen zu URL-Parametern: http:\/\/developer.ebay.com\/devzone\/shopping\/docs\/Concepts\/ShoppingAPI_FormatOverview.html#AffiliateURLParameters<\/p>\n<p class=\"quellen\">[2] API-Funktion FindItems: http:\/\/developer.ebay.com\/devzone\/shopping\/docs\/CallRef\/FindItems.html<\/p>\n<p class=\"quellen\">[3] API-Funktion FindItemsAdvanced: http:\/\/developer.ebay.com\/devzone\/shopping\/docs\/CallRef\/FindItemsAdvanced.html<\/p>\n<p class=\"quellen\">[4] Werte f&uuml;r den Parameter ItemSort: http:\/\/developer.ebay.com\/devzone\/shopping\/docs\/CallRef\/types\/SimpleItemSortCodeType.html<\/p>\n<p class=\"quellen\">[5] Werte f&uuml;r den Parameter ItemType: http:\/\/developer.ebay.com\/devzone\/shopping\/docs\/CallRef\/types\/ItemTypeCodeType.html<\/p>\n<p class=\"quellen\">[6] Werte f&uuml;r den Parameter IncludeSelector: http:\/\/developer.ebay.com\/devzone\/shopping\/docs\/CallRef\/FindItemsAdvanced.html#Request.IncludeSelector<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>eBay.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{C2CFD1CE-077A-4978-992B-580980761614}\/aiu_650.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access steuert alles fern, was nicht bei drei auf dem n&auml;chsten Baum ist &#8211; und diesmal ist eBay dran. Zwar liefert die Handelsplattform keine VBA-Schnittstelle, aber der versierte Access-Entwickler scheut auch vor dem Anzapfen eines Webservice zur&uuml;ck. Der von eBay bietet alle M&ouml;glichkeiten, die auch die Benutzeroberfl&auml;che im Browser liefert &#8211; und mehr. So k&ouml;nnen Sie den Webservice beispielsweise dazu nutzen, Artikel aus der Tabelle einer Warenwirtschaft in einem Rutsch online zu stellen. In diesem Beitrag besch&auml;ftigen wir uns jedoch erstmal mit der Suche nach Artikeln.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012009,662009,44000026,44000030,44000027],"tags":[],"class_list":["post-55000650","post","type-post","status-publish","format-standard","hentry","category-66012009","category-662009","category-Interaktiv","category-Internet","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>eBay-Artikelsuche mit Access - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"eBay-Artikelsuche mit Access\" \/>\n<meta property=\"og:description\" content=\"Access steuert alles fern, was nicht bei drei auf dem n&auml;chsten Baum ist - und diesmal ist eBay dran. Zwar liefert die Handelsplattform keine VBA-Schnittstelle, aber der versierte Access-Entwickler scheut auch vor dem Anzapfen eines Webservice zur&uuml;ck. Der von eBay bietet alle M&ouml;glichkeiten, die auch die Benutzeroberfl&auml;che im Browser liefert - und mehr. So k&ouml;nnen Sie den Webservice beispielsweise dazu nutzen, Artikel aus der Tabelle einer Warenwirtschaft in einem Rutsch online zu stellen. In diesem Beitrag besch&auml;ftigen wir uns jedoch erstmal mit der Suche nach Artikeln.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:21:10+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/98f84644525b4650b5f2be3cc56ebeef\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"24\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"eBay-Artikelsuche mit Access\",\"datePublished\":\"2020-05-22T22:21:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/\"},\"wordCount\":3859,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/98f84644525b4650b5f2be3cc56ebeef\",\"articleSection\":[\"1\\\/2009\",\"2009\",\"Interaktiv\",\"Internet\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/\",\"name\":\"eBay-Artikelsuche mit Access - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/98f84644525b4650b5f2be3cc56ebeef\",\"datePublished\":\"2020-05-22T22:21:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/98f84644525b4650b5f2be3cc56ebeef\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/98f84644525b4650b5f2be3cc56ebeef\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/eBayArtikelsuche_mit_Access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"eBay-Artikelsuche mit Access\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"eBay-Artikelsuche mit Access - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/","og_locale":"de_DE","og_type":"article","og_title":"eBay-Artikelsuche mit Access","og_description":"Access steuert alles fern, was nicht bei drei auf dem n&auml;chsten Baum ist - und diesmal ist eBay dran. Zwar liefert die Handelsplattform keine VBA-Schnittstelle, aber der versierte Access-Entwickler scheut auch vor dem Anzapfen eines Webservice zur&uuml;ck. Der von eBay bietet alle M&ouml;glichkeiten, die auch die Benutzeroberfl&auml;che im Browser liefert - und mehr. So k&ouml;nnen Sie den Webservice beispielsweise dazu nutzen, Artikel aus der Tabelle einer Warenwirtschaft in einem Rutsch online zu stellen. In diesem Beitrag besch&auml;ftigen wir uns jedoch erstmal mit der Suche nach Artikeln.","og_url":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:21:10+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/98f84644525b4650b5f2be3cc56ebeef","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"24\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"eBay-Artikelsuche mit Access","datePublished":"2020-05-22T22:21:10+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/"},"wordCount":3859,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/98f84644525b4650b5f2be3cc56ebeef","articleSection":["1\/2009","2009","Interaktiv","Internet","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/","url":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/","name":"eBay-Artikelsuche mit Access - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/98f84644525b4650b5f2be3cc56ebeef","datePublished":"2020-05-22T22:21:10+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/98f84644525b4650b5f2be3cc56ebeef","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/98f84644525b4650b5f2be3cc56ebeef"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/eBayArtikelsuche_mit_Access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"eBay-Artikelsuche mit Access"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000650"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000650\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}