{"id":55001042,"date":"2016-06-01T00:00:00","date_gmt":"2020-05-22T18:59:44","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1042"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"ebayZugriff_mit_Access","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/","title":{"rendered":"ebay-Zugriff mit Access"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/2d7d22bbdce241e28511883126084a54\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Bereits im Jahr 2009 haben wir gezeigt, wie Sie von Access aus Daten von ebay auslesen und selbst Angebote einstellen. &uuml;ber die Jahre &auml;ndern sich jedoch die Mechanismen einer solchen Online-Schnittstelle, also schauen wir uns in diesem Beitrag an, wie der aktuelle Zugriff auf ebay aussieht und wie Sie diesen von einer Access-Anwendung aus realisieren. Dazu legen wir einen neuen Benutzer- und Entwickler-Account an und erstellen dann die notwendigen Objekte, um von Access aus auf die Daten zuzugreifen.<\/b><\/p>\n<p>F&uuml;r das Verst&auml;ndnis der folgenden Abhandlung ist es wichtig zu wissen, dass Sie sowohl einen normalen eBay-Account als auch einen Entwickler-Account ben&ouml;tigen. <\/p>\n<h2>Neuen ebay-Account anlegen<\/h2>\n<p>Falls Sie noch kein ebay-Konto haben, &ouml;ffnen Sie einfach die ebay-Seite unter <b>www.ebay.de<\/b>. Dort finden Sie ganz unten unter <b>Kaufen|Neu anmelden bei ebay <\/b>alle notwendigen Informationen. Kurz gefasst klicken Sie dort auf <b>Jetzt bei eBay anmelden <\/b>und landen auf der Seite <b>signin.ebay.de<\/b>. Hier geben Sie Ihre Daten auf der Registerseite <b>Neu anmelden <\/b>ein (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_001.png\" alt=\"Neu registrieren bei ebay\" width=\"499,5594\" height=\"621,5175\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Neu registrieren bei ebay<\/span><\/b><\/p>\n<p>Sie erhalten dann einen eindeutigen, automatisch generierten Benutzernamen wie <b>andminhors_0<\/b>, den Sie aber auch durch einen selbst gew&auml;hlten Benutzernamen &uuml;berschreiben k&ouml;nnen. Damit sind die Arbeiten auf dieser Seite bereits erledigt. Die meisten allgemeinen Informationen finden Sie nun im Bereich <b>Mein eBay<\/b>.<\/p>\n<h2>Neuen Entwickler-Account anlegen<\/h2>\n<p>Nun &ouml;ffnen Sie die Webseite <b>developer.ebay.com <\/b>und damit das ebay-Entwicklerprogramm. Auch hier registrieren wir uns zun&auml;chst, und zwar durch einen Klick auf <b>Sign In\/Join<\/b>. Auch dort nutzen wir ein Formular, um unsere Daten einzugeben (s. Bild 2). Damit wir die beiden Benutzer nachher unterscheiden k&ouml;nnen, habe ich dem Benutzernamen beim Developer-Programm die Zeichenfolge <b>_api <\/b>angeh&auml;ngt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_002.png\" alt=\"Neu registrieren als Developer bei ebay\" width=\"499,5594\" height=\"673,6995\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Neu registrieren als Developer bei ebay<\/span><\/b><\/p>\n<h2>Application Keys holen<\/h2>\n<p>Im folgenden Dialog geben Sie f&uuml;r die Vergabe der sogenannten <b>Application Keys<\/b>, die Sie sp&auml;ter ben&ouml;tigen, den Namen der geplanten Anwendung ein &#8211; hier kurz und b&uuml;ndig <b>accessBay<\/b> (s. Bild 3). Nun erscheinen unten Links zum Erstellen von Keysets f&uuml;r Sandbox- und Production-Modus. Sie entscheiden selbst, ob Sie zun&auml;chst in der Sandbox &uuml;ben wollen oder direkt auf echte ebay-Daten zugreifen wollen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_003.png\" alt=\"Anwendungsname angeben\" width=\"499,5594\" height=\"285,7507\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Anwendungsname angeben<\/span><\/b><\/p>\n<p>Nach der Auswahl des Eintrags Production fragt ebay einige weitere Daten zu Ihrer Person ab, um Sie kontaktieren zu k&ouml;nnen, falls es im Rahmen der Benutzung der Keys zu Problemen kommt (s. Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_004.png\" alt=\"Angabe weiterer Informationen\" width=\"499,5594\" height=\"406,1021\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Angabe weiterer Informationen<\/span><\/b><\/p>\n<p>Danach erhalten Sie eine &uuml;bersicht, &uuml;ber die Sie wahlweise auch noch ein Keyset f&uuml;r den Bereich erstellen k&ouml;nnen, den Sie noch nicht ber&uuml;cksichtigt haben &#8211; also wahlweise <b>Sandbox <\/b>oder <b>Production<\/b> (s. Bild 5). Gleichzeitig weist ebay im Falle des Production-KeySet darauf hin, dass Sie 5.000 Aufrufe pro Tag an die ebay-Api absetzen k&ouml;nnen. F&uuml;r mehr ist eine Ansicht der Anwendung durch das ebay-Team erforderlich.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_005.png\" alt=\"&uuml;bersicht mit den Application Keys f&uuml;r den Sandbox- und f&uuml;r den Production-Modus\" width=\"649,4275\" height=\"343,4471\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: &uuml;bersicht mit den Application Keys f&uuml;r den Sandbox- und f&uuml;r den Production-Modus<\/span><\/b><\/p>\n<h2>User Token erstellen<\/h2>\n<p>Nun ben&ouml;tigen Sie noch einen User Token f&uuml;r das Keyset, das Sie verwenden m&ouml;chten. Dazu klicken Sie rechts neben <b>App ID <\/b>auf den Link <b>User Tokens<\/b>.<\/p>\n<p>Der Clou des User Tokens ist, dass es sich dabei um einen Schl&uuml;ssel handelt, der im Kontext eines ebay-Benutzerkontos erstellt wird und der sich auf die zu programmierende Anwendung bezieht. Da wir eine Anwendung nur f&uuml;r uns selbst programmieren m&ouml;chten, ist dies die richtige Option f&uuml;r uns. Die Alternative w&auml;re, einen Token anzufragen, der eine Anwendung erm&ouml;glicht, die beliebige ebay-Nutzer verwenden k&ouml;nnen, ohne dass jeder einzelne sich einen User Token holen muss &#8211; die Benutzer m&uuml;ssen sich dann lediglich selbst anmelden.<\/p>\n<p>Den Token erhalten wir &uuml;ber den Dialog aus Bild 6. Hier klicken Sie auf <b>Sign in to Production <\/b>(sofern Sie einen Token f&uuml;r den Production-Modus anfragen &#8211; sonst w&uuml;rde hier stehen <b>Sign in to Sandbox<\/b>. Dazu m&uuml;ssten Sie allerdings auch noch einen neuen Sandbox-User anlegen). Die gew&uuml;nschte Umgebung k&ouml;nnen Sie &uuml;ber die Optionen oben auf der Seite ausw&auml;hlen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_006.png\" alt=\"Erstellen eines User Tokens\" width=\"649,4275\" height=\"332,2347\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Erstellen eines User Tokens<\/span><\/b><\/p>\n<p>Im folgenden Dialog fragt ebay nach weiteren Daten zu Ihrer Person, also zu der Person, die das Entwickler-Konto nutzt. In diesem Fall werden die bestehenden Daten um die Adressdaten erg&auml;nzt.<\/p>\n<p>Anschlie&szlig;end erscheint der Anmeldedialog der ebay-Seite selbst, also nicht der der Entwicklerplattform. Hier melden Sie sich nun mit den Zugangsdaten des eingangs erstellten (oder bereits vorhandenen) ebay-Benutzers an, in dessen Namen die App auf ebay zugreifen soll.<\/p>\n<p>Im folgenden Dialog klicken Sie noch auf <b>I agree <\/b>und erhalten dann eine Seite sp&auml;ter Zugriff auf Ihren User Token, mit dem Sie im Namen des angegebenen ebay-Benutzerkontos &uuml;ber Ihre App auf ebay zugreifen (s. Bild 8). Der Token ist die recht lange, kryptische Zeichenfolge, die Sie f&uuml;r folgende Anwendungszwecke immer komplett ben&ouml;tigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_009.png\" alt=\"Registrierung eines Sandbox-Users\" width=\"499,5594\" height=\"495,6208\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Registrierung eines Sandbox-Users<\/span><\/b><\/p>\n<p>Damit haben Sie alle Daten zusammen, die Sie f&uuml;r den Zugriff von einer Access-Datenbankanwendung auf ebay ben&ouml;tigen. Nun erstellen wir die Access-Anwendung selbst und programmieren eine kleine Benutzeroberfl&auml;che sowie den Code f&uuml;r den Zugriff auf die ebay-Schnittstelle per XML.<\/p>\n<h2>Sandbox-User anlegen<\/h2>\n<p>Das Anlegen eines Sandbox-Users erledigen Sie ebenfalls vom obigen Dialog aus. Dort w&auml;hlen Sie unter <b>Environment <\/b>die Option <b>Sandbox <\/b>und finden unter der Schaltfl&auml;che <b>Sign in to Sandbox <\/b>den Link <b>Register a new Sandbox user <\/b>vor. Der Dialog hier sieht nat&uuml;rlich anders aus als der zum Registrieren eines &#8222;echten&#8220; ebay-Benutzers (s. Bild 7). Hier sind nur wenige Informationen n&ouml;tig, daf&uuml;r aber auch einige, die Sie bei der herk&ouml;mmlichen Registrierung nicht erhalten. Wichtig f&uuml;r Entwickler, die gegebenenfalls eine App f&uuml;r den Zugriff auf andere als die deutsche ebay-Seite bauen wollen, ist die Option <b>Registration Site<\/b>. Hier k&ouml;nnen Sie auch <b>United States (US)<\/b>, <b>Motors <\/b>oder andere L&auml;nder ausw&auml;hlen. Diese Option werden Sie sp&auml;ter in der Tabelle <b>tblOptionen <\/b>im Feld <b>SiteID <\/b>vorfinden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_007.png\" alt=\"Dialog mit dem fertigen User Token\" width=\"599,4715\" height=\"449,6035\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Dialog mit dem fertigen User Token<\/span><\/b><\/p>\n<p>Merken Sie sich, dass der Benutzername des Sandbox-Users mit <b>TESTUSER_ <\/b>beginnt.<\/p>\n<h2>Tabelle zum Speichern der Accountdaten<\/h2>\n<p>Nun haben wir bereits einige Daten, die wir der Developer-Seite von ebay entnehmen und in unserer Anwendung speichern wollen &#8211; die <b>DevID<\/b>, <b>AppID<\/b>, <b>CertID <\/b>und den <b>Token <\/b>jeweils f&uuml;r einen Produktiv- und einen Sandbox-Account. Dazu legen wir eine Tabelle namens <b>tblOptions<\/b> an, die im Entwurf wie in Bild 9 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_008.png\" alt=\"Tabellen zum Speichern der Optionen\" width=\"649,4275\" height=\"481,4442\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Tabellen zum Speichern der Optionen<\/span><\/b><\/p>\n<p>Neben den Account-Daten nimmt die Tabelle noch einige weitere Informationen auf. Dazu geh&ouml;rt etwa ein <b>Ja\/Nein<\/b>-Feld namens <b>Sandbox<\/b>, das festlegt, ob Sie gerade den Sandbox- oder den Produktiv-Account f&uuml;r den Zugriff &uuml;ber die Anwendung nutzen wollen.<\/p>\n<p>Weitere Felder legen allgemeine Eigenschaften f&uuml;r den Zugriff auf die ebay-Plattform fest, zum Beispiel um zu definieren, wie diese auf die &uuml;bergabe fehlerhafter XML-Elemente in Anfragen reagieren soll, in welcher Sprache Fehlermeldungen auszugeben sind, in welcher Version die XML-Anfragen formuliert sind, auf welche ebay-Seite zugegriffen werden soll und welche URLs dazu verwendet werden &#8211; Letzteres jeweils wieder f&uuml;r den Sandbox- und den Production-Betrieb.<\/p>\n<p>Und auch das Land, in dessen Kontext die Abfrage abgesetzt wird, und die W&auml;hrung ben&ouml;tigen wir sp&auml;ter zum Zusammenstellen der Anfragen.<\/p>\n<h2>Formular zum Bearbeiten der Einstellungen<\/h2>\n<p>Damit Sie die Einstellungen komfortabel bearbeiten k&ouml;nnen, legen wir ein passendes Formular namens <b>frmOptionen <\/b>an (s. Bild 10). Es enth&auml;lt die Tabelle <b>tblOptionen<\/b> als Datenherkunft und zeigt alle Felder dieser Tabelle an &#8211; aufgeteilt in verschiedene Bereiche.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_010.png\" alt=\"Formular f&uuml;r die Eingabe der Optionen\" width=\"649,4275\" height=\"417,7067\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Formular f&uuml;r die Eingabe der Optionen<\/span><\/b><\/p>\n<p>Mit dem Kontrollk&auml;stchen, das an das Feld Sandbox gebunden ist, legen Sie fest, ob Sie gerade mit den Sandbox- oder den Produktiv-Daten arbeiten m&ouml;chten.<\/p>\n<p>Je nach Auswahl werden zur besseren Kennzeichnung die nicht verwendeten Elemente in den Bereichen <b>Sandbox-Account <\/b>beziehungsweise <b>Production-Account <\/b>deaktiviert. Wenn Sie nun die Informationen von der ebay-Developer-Webseite in die entsprechenden Felder des Formulars &uuml;bertragen, sind wichtige Voraussetzungen f&uuml;r den Zugriff schon einmal gegeben.<\/p>\n<p>Anschlie&szlig;end schauen wir und die &uuml;brigen ben&ouml;tigten Werte an:<\/p>\n<ul>\n<li><b>WarningLevel<\/b>: Stellen wir auf <b>High <\/b>ein, damit wir auch Meldungen erhalten, wenn wir veraltete oder ung&uuml;ltige Elemente in unseren XML-Anfragen verwenden. Dies sollten Sie f&uuml;r den Produktivzugriff mit vielen Anfragen auf <b>Low <\/b>einstellen.<\/li>\n<li><b>ErrorLanguage<\/b>: Sprache, in der Fehlermeldungen ausgegeben werden. <b>de_DE <\/b>w&auml;re sicher komfortabel, um schnell alles zu verstehen, aber meist hilft das nicht weiter und Sie m&uuml;ssen nach M&ouml;glichkeiten f&uuml;r das Beheben von Fehlern googeln. Da es wesentlich mehr englischsprachige Quellen zu diesem Thema gibt, ist also <b>en_US <\/b>die bessere Wahl.<\/li>\n<li><b>Item_Country<\/b>: Code aus zwei Buchstaben, der angibt, in welchem Land der Benutzer registriert ist &#8211; in unserem Fall also <b>DE<\/b>, <b>AT <\/b>oder <b>CH <\/b>(weitere siehe <b>http:\/\/developer.ebay.com\/devzone\/xml\/docs\/reference\/ebay\/types\/CountryCodeType.html<\/b>).<\/li>\n<li><b>Item_Currency<\/b>: Code aus drei Buchstaben, der die Angebotsw&auml;hrung angibt, also etwa <b>EUR <\/b>(weitere M&ouml;glichkeiten hier: <b>http:\/\/developer.ebay.com\/devzone\/xml\/docs\/reference\/ebay\/types\/CurrencyCodeType.html<\/b>).<\/li>\n<li><b>SiteID<\/b>: ebay-Seite, auf die zugegriffen werden soll. Hier gibt es die verschiedenen nationalen Seiten, aber auch spezielle Seiten wie <b>Motors<\/b>. F&uuml;r Deutschland <b>77<\/b>, &ouml;sterreich <b>16<\/b>, Schweiz <b>193 <\/b>&#8211; weitere siehe hier: <b>http:\/\/developer.ebay.com\/devzone\/xml\/docs\/reference\/ebay\/extra\/AddItm.Rqst.Itm.St.html<\/b>.<\/li>\n<li><b>Version<\/b>: ebay wird st&auml;ndig weiterentwickelt, und somit auch die Programmierschnittstelle. Mit der Versionsnummer geben Sie an, gegen welche Schnittstelle Sie programmieren. Die Schnittstelle darf nicht &auml;lter als 18 Monate sein. Den Plan f&uuml;r die niedrigste aktuell unterst&uuml;tzte Version finden Sie hier: <b>http:\/\/developer.ebay.com\/devzone\/xml\/docs\/HowTo\/eBayWS\/eBaySchemaVersioning.html#VersionSupportSchedule<\/b><\/li>\n<li><b>Vers.Categories<\/b>: Version der Kategorie-Daten<\/li>\n<\/ul>\n<h2>Verschiedene APIs<\/h2>\n<p>ebay bietet verschiedene Programmierschnittstellen an, die Sie mit entsprechenden XML-Anfragen aufrufen k&ouml;nnen. In diesem Artikel schauen wir uns zwei davon an: die Shopping-API, die den Zugriff auf angebotene Artikel erlaubt, sowie die Trading-API, mit der Sie selbst Artikel einstellen und alle weiteren Aufgaben erledigen k&ouml;nnen, die mit dem Handeln auf der ebay-Plattform zu tun haben.<\/p>\n<h2>Shopping-API: Artikel suchen<\/h2>\n<p>Die Shopping-API erlaubt beispielsweise das Suchen nach Artikeln. Um dies zu testen, wollen wir die gefundenen Artikel in einer Tabelle speichern, die wie in Bild 11 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_011.png\" alt=\"Tabelle zum Speichern von Suchergebnissen\" width=\"550\" height=\"366,6667\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Tabelle zum Speichern von Suchergebnissen<\/span><\/b><\/p>\n<p>Das Formular zum Eingeben des Suchbegriffes und zur Ausgabe der Suchergebnisse besteht aus Haupt- und Unterformular. Das Unterformular verwendet die Tabelle <b>tblSuchergebnisse <\/b>als Datenherkunft und zeigt die drei Felder <b>Artikel <\/b>und <b>Preis <\/b>an (s. Bild 12). Au&szlig;erdem stellen wir die Eigenschaft <b>Standardansicht <\/b>auf den Wert <b>Datenblatt <\/b>ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_012.png\" alt=\"Unterformular zur Anzeige der Suchergebnisse\" width=\"425\" height=\"187,9807\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Unterformular zur Anzeige der Suchergebnisse<\/span><\/b><\/p>\n<p>Das Hauptformular enth&auml;lt logischerweise das Unterformular. Au&szlig;erdem soll es drei Steuerelemente zur Festlegung der Suchkriterien bieten:<\/p>\n<ul>\n<li><b>txtSuchbegriff<\/b>: Dient zur Eingabe des Suchbegriffs.<\/li>\n<li><b>cboSortierung<\/b>: Erwartet die Angabe einer Sortierung. Enth&auml;lt eine Wertliste mit folgender Datensatzherkunft (<b>Herkunftstyp <\/b>auf <b>Wertliste <\/b>einstellen): <b>&#8222;BestMatch&#8220;;&#8220;Beste Treffer&#8220;;&#8220;CurrentBid&#8220;;&#8220;Ak-tuel-les Gebot&#8220;;&#8220;EndTime&#8220;;&#8220;Angebotsende&#8220;<\/b><\/li>\n<li><b>txtAnzahlTreffer<\/b>: Angabe der Anzahl der Suchergebnisse, welche die Anfrage zur&uuml;ckliefern soll.<\/li>\n<\/ul>\n<p>Da die Parameter m&ouml;glicherweise beim n&auml;chsten Aufruf nochmals verwendet werden sollen, wollen wir diese auch in der Tabelle <b>tblOptionen <\/b>speichern.<\/p>\n<p>Dazu f&uuml;gen Sie dieser die drei Felder <b>Sortierung<\/b>, <b>AnzahlTreffer <\/b>und <b>Suchbegriff <\/b>hinzu und binden erst das Formular <b>frmArtikelsuche <\/b>&uuml;ber die Eigenschaft <b>Datenherkunft <\/b>an die Tabelle <b>tblOptionen <\/b>und dann die drei Steuerelemente des Formulars an die neu hinzugef&uuml;gten Felder.<\/p>\n<p>Die Eigenschaften <b>Datensatzmarkierer<\/b>, <b>Navigationsschaltfl&auml;chen<\/b>, <b>Trennlinien <\/b>und <b>Bildlaufleisten <\/b>stellen Sie f&uuml;r das Hauptformular auf den Wert <b>Nein<\/b>, die Eigenschaft <b>Automatisch zentrieren <\/b>auf <b>Ja <\/b>ein.<\/p>\n<p>Wir f&uuml;gen dem Formular au&szlig;erdem drei Schaltfl&auml;chen hinzu: Die erste startet die Suche und hei&szlig;t <b>cmdSuchen<\/b>, die zweite soll den aktuell markierten Eintrag im Unterformular bei ebay &ouml;ffnen und hei&szlig;t <b>cmdBeiEbayAnsehen <\/b>und die dritte schlie&szlig;t das Formular (<b>cmdOK<\/b>). Das Formular sieht im Entwurf wie in Bild 13 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_03\/pic_1042_013.png\" alt=\"Hauptformular f&uuml;r die Suche nach ebay-Artikeln\" width=\"500\" height=\"398,9547\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Hauptformular f&uuml;r die Suche nach ebay-Artikeln<\/span><\/b><\/p>\n<h2>Suche programmieren<\/h2>\n<p>Nun brauchen wir nur noch ein wenig VBA-Code, der uns aus den Angaben in den drei Steuerelementen eine XML-Anfrage zusammenstellt, diese an ebay schickt und das Ergebnis in die Tabelle <b>tblSuchergebnisse <\/b>schreibt.<\/p>\n<p>Den Start macht die Schaltfl&auml;che <b>cmdSuche<\/b>, &uuml;ber die wir die Suche aufrufen. Die f&uuml;r das Ereignis <b>Beim Klicken <\/b>hinterlegte Ereignisprozedur finden Sie in Listing 1.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdSuchen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strSuchbegriffe<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"DELETE FROM tblSuchergebnisse\"\r\n     strSuchbegriffe = Nz(Me!txtSuchbegriff)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strSuchbegriffe) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Bitte geben Sie einen Suchbegriff ein.\"\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     FindItemsAdvanced\r\n     Me!sfmSuchergebnis.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Starten der Suche &uuml;ber die Schaltfl&auml;che cmdSuchen<\/span><\/b><\/p>\n<p>Diese Methode l&ouml;scht zun&auml;chst alle in der Tabelle <b>tblSuchergebnisse <\/b>gespeicherten Eintr&auml;ge. Dann speichert sie den Suchbegriff auf dem Textfeld <b>txtSuchbegriff <\/b>in der Variablen <b>strSuchbegriffe<\/b>. Ist das Feld leer beziehungsweise enth&auml;lt es den Wert <b>Null<\/b>, wird dank der Funktion <b>Nz <\/b>eine leere Zeichenkette gespeichert.<\/p>\n<p>Ist dies der Fall, meldet die Prozedur, dass noch kein Suchbegriff eingegeben wurde, und bricht die Prozedur ab. Anderenfalls ruft sie die Funktion <b>FindItemsAdvanced <\/b>auf. Diese soll die Suche ausf&uuml;hren und die Ergebnisse in der Tabelle <b>tblSuchergebnisse <\/b>speichern, damit der anschlie&szlig;ende Aufruf der <b>Requery<\/b>-Methode des Unterformulars <b>sfmSuchergebnis.Form <\/b>diese im Unterformular anzeigt.<\/p>\n<h2>Die Funktion FindItemsAdvanced<\/h2>\n<p>Diese Funktion ist f&uuml;r das Zusammenstellen einer XML-Anfrage verantwortlich, die per HTTP-Request an die ebay-API &uuml;bergeben wird und ein Ergebnis in Form eines XML-Dokuments zur&uuml;ckliefern soll. Dieses soll die Funktion dann mit einer weiteren Hilfsprozedur auswerten und die Ergebnisse in der Tabelle <b>tblSuchergebnisse <\/b>speichern.<\/p>\n<p>Bei der vorherigen Version unserer Artikelabfrage von 2009 konnte man noch per einfachem REST-Aufruf, also einer einfachen URL mit ein paar Parametern, auf die Suche nach Artikeln zugreifen. Diese ist nun seit einigen Jahren veraltet und die dazu verwendeten Funktionen wurden aus der Shopping-Api in die Finding-Api &uuml;bertragen.<\/p>\n<p>Informationen &uuml;ber den grundlegenden Aufbau eines Requests an die Finding-API erhalten Sie unter folgender Adresse:<\/p>\n<pre>&lt;b&gt;http:\/\/developer.ebay.com\/devzone\/finding\/Concepts\/MakingACall.html&lt;\/b&gt;<\/pre>\n<p>Das hei&szlig;t f&uuml;r uns, dass wir nicht mehr mit einer einfachen URL weiterkommen, die wir an ebay schicken, sondern wir m&uuml;ssen ein XML-Dokument mit den erforderlichen Informationen zusammenstellen.<\/p>\n<p>Die speziellen Informationen &uuml;ber den Aufruf der API-Funktion <b>findItemsAdvanced <\/b>finden Sie hier:<\/p>\n<pre>http:\/\/developer.ebay.com\/devzone\/finding\/CallRef\/findItemsAdvanced.html<\/pre>\n<p>Die Funktion finden Sie in Listing 2. Sie deklariert jeweils ein Objekt des Typs <b>DOMDocument<\/b>: <b>objRequest <\/b>nimmt die XML-Anfrage auf, <b>objResponse <\/b>die XML-Antwort. <b>strAppID <\/b>soll die <b>AppID <\/b>f&uuml;r den aktuellen Einsatzzweck, also Sandbox oder Production, aufnehmen, die in der Tabelle <b>tblOptionen <\/b>gespeichert ist. <b>intTrefferMax<\/b> ist die &uuml;ber die Benutzeroberfl&auml;che festgelegte maximal gew&uuml;nschte Anzahl an Suchergebnissen. <b>intAnzahl<\/b> soll die tats&auml;chlich f&uuml;r die aktuell einzulesende Seite zu ermittelnde Anzahl der Suchergebnisse aufnehmen. Wenn der Benutzer beispielsweise 150 Suchergebnisse anfordert und der Wert aus <b>cintAnzahlSeite <\/b>lautet <b>100<\/b>, wird <b>intAnzahl <\/b>beim Aufruf der ersten Seite den Wert <b>100 <\/b>und beim Aufruf der zweiten Seite den Wert <b>50 <\/b>aufnehmen. <b>intSeite <\/b>enth&auml;lt die Nummer der aktuell einzulesenden Seite und <b>intSeitenGesamt <\/b>die maximale Anzahl der einzulesenden Seiten. Die Variable <b>strURL <\/b>nimmt die URL des aufzurufenden Dienstes auf. Die Variable <b>intAnzahlSeite <\/b>speichert die Anzahl der Suchergebnisse, die je Seite zur&uuml;ckgeliefert werden sollen. Sie wird als Erstes gef&uuml;llt, und zwar mit dem Wert des Feldes <b>AnzahlSeite <\/b>der Tabelle <b>tblOptionen<\/b>, die ja an das Formular gebunden ist.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FindItemsAdvanced()\r\n     <span style=\"color:blue;\">Dim <\/span>objRequest<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objResponse<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>strAppID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intTrefferMax<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intAnzahl<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intSeite<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intSeitenGesamt<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strURL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>intAnzahlSeite<span style=\"color:blue;\"> As Integer<\/span>\r\n     intAnzahlSeite = Me!AnzahlSeite\r\n     <span style=\"color:blue;\">If <\/span>Me!Sandbox<span style=\"color:blue;\"> Then<\/span>\r\n         strAppID = Me!AppID_Sandbox\r\n         strURL = Me!RequestURLFinding_Sandbox\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strAppID = Me!AppID_Production\r\n         strURL = Me!RequestURLFinding_Production\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     intTrefferMax = Me!txtAnzahlTreffer\r\n     intSeitenGesamt = Int((intTrefferMax - 1) \/ intAnzahlSeite) + 1\r\n     For intSeite = 1 To intSeitenGesamt\r\n         <span style=\"color:blue;\">If <\/span>intSeite * intAnzahlSeite &gt; intTrefferMax<span style=\"color:blue;\"> Then<\/span>\r\n             intAnzahl = intTrefferMax - (intSeite - 1) * intAnzahlSeite\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             intAnzahl = intAnzahlSeite\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> objRequest = CreateFindItemsAdvancedRequest(Me!txtSuchbegriff, intAnzahl, intSeite)\r\n         <span style=\"color:blue;\">Set<\/span> objResponse = FindingAPIRequest(objRequest, \"findItemsAdvanced\", strAppID, strURL)\r\n         <span style=\"color:blue;\">Debug.Print<\/span> FormatXML(objResponse.XML)\r\n         ProcessSearchResult objResponse.SelectSingleNode(\"findItemsAdvancedResponse\")\r\n         If intSeitenGesamt &gt;= _\r\n                 objResponse.SelectSingleNode(\"findItemsAdvancedResponse\/paginationOutput\/totalPages\").nodeTypedValue Then\r\n             <span style=\"color:blue;\">Exit For<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> intSeite\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Hauptfunktion zum Durchf&uuml;hren der Suche<\/span><\/b><\/p>\n<p>Die erste <b>If&#8230;Then&#8230;Else<\/b>-Bedingung pr&uuml;ft, ob aktuell der Sandbox-Modus aktiviert ist, und legt abh&auml;ngig davon den Wert f&uuml;r die Variable <b>strAppID <\/b>und den Wert f&uuml;r die Variable <b>strURL <\/b>fest. Beide Werte werden aus den entsprechenden Feldern der Tabelle <b>tblOptionen<\/b> gezogen, die an das Formular gebunden sind. <b>intTrefferMax <\/b>f&uuml;llt die Prozedur zun&auml;chst mit dem Wert aus dem Textfeld <b>txtAnzahlTreffer<\/b>. Dann berechnet sie die Gesamtanzahl der Seiten. Dazu zieht sie von der vom Benutzer vorgegebenen Anzahl der Suchergebnisse den Wert <b>1 <\/b>ab, teilt das Ergebnis durch die Anzahl der Eintr&auml;ge je Seite aus der Konstanten <b>cintAnzahlSeiten<\/b>, entfernt mit der <b>Int<\/b>-Funktion die Nachkommastellen und addiert <b>1 <\/b>hinzu. Bei <b>150 <\/b>gew&uuml;nschten Suchergebnissen kommt hier <b>2 <\/b>heraus, bei <b>99 <\/b>oder <b>100 <\/b>der Wert <b>1<\/b>. Wie man solch eine Formel ermittelt Man steckt einfach ein wenig Hirnschmalz hi-nein und experimentiert, bis alle denkbaren Konstellationen das richtige Ergebnis liefern.<\/p>\n<p>Mit diesem Ergebnis k&ouml;nnen wir in das Abrufen der Ergebnisse &uuml;ber die Finding-API von ebay einsteigen. Dies erledigen wir entsprechend der ermittelten Werte seitenweise mit der vorgegebenen Anzahl von Eintr&auml;gen je Seite, in diesem Fall jeweils <b>100<\/b>. Die <b>For&#8230;Next<\/b>-Schleife durchl&auml;uft die Werte von <b>1 <\/b>bis <b>intSeitenGesamt <\/b>und speichert den aktuellen Wert jeweils in der Variablen <b>intSeite <\/b>f&uuml;r die aktuelle Seitenzahl.<\/p>\n<p>Dabei ermittelt sie, wie viele Eintr&auml;ge beim Abruf der aktuellen Seite gelesen werden sollen. Wenn wir insgesamt 150 Eintr&auml;ge einlesen wollen, soll der erste Abruf 100 Eintr&auml;ge, der zweite aber nur noch 50 anfordern. Wenn also die Seitenzahl multipliziert mit der Anzahl der Eintr&auml;ge je Seite gr&ouml;&szlig;er als die Anzahl der maximal gew&uuml;nschten Treffer ist, berechnen wir die Anzahl der einzulesenden Elemente neu &#8211; und zwar, indem wir von der maximal gew&uuml;nschten Gesamtzahl die Anzahl der bereits eingelesenen Seiten abziehen. Das Ergebnis landet dann in der Variablen <b>intAnzahl<\/b>. Haben wir mit der aktuellen Seite noch nicht die maximale Anzahl der gew&uuml;nschten Suchergebnisse eingelesen, f&uuml;llt die Prozedur <b>intAnzahl <\/b>mit dem Wert aus <b>cintAnzahlSeite<\/b>.<\/p>\n<p>Nun ruft die Prozedur die Funktion <b>CreateFindItemsAdvancedRequest <\/b>auf und &uuml;bergibt dieser einige Parameter, auf deren Basis die Funktion den Request im XML-Format zusammenstellen soll: den Suchbegriff, die <b>AppID<\/b>, die gew&uuml;nschte Anzahl f&uuml;r diese Abfrage sowie die aktuelle Seite (in diesem ersten Durchlauf <b>1<\/b>). Dies liefert einen Request zur&uuml;ck, der etwa so aussieht:<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\r\n&lt;findItemsAdvancedRequest  xmlns=\"http:\/\/www.ebay.com\/marketplace\/search \/v1\/services\"&gt;\r\n     &lt;keywords&gt;minhorst&lt;\/keywords&gt;\r\n     &lt;paginationInput&gt;\r\n         &lt;entriesPerPage&gt;100&lt;\/entriesPerPage&gt;\r\n         &lt;pageNumber&gt;1&lt;\/pageNumber&gt;\r\n     &lt;\/paginationInput&gt;\r\n&lt;\/findItemsAdvancedRequest&gt;<\/pre>\n<p>Das Root-Element hei&szlig;t <b>findItemsAdvancedRequest<\/b>. Der Suchbegriff im <b>keywords<\/b>-Element lautet <b>minhorst<\/b>, f&uuml;r die Menge der gelieferten Ergebnisse haben wir mit <b>entriesPerPage <\/b>auf <b>100 <\/b>pro Seite festgelegt. Au&szlig;erdem stellen wir mit <b>pageNumber <\/b>ein, welche Seite des Ergebnisses der Request liefern soll.<\/p>\n<p>Dieses XML-Dokument &uuml;bersenden wir nun als ersten Parameter der Funktion <b>FindingAPIRequest <\/b>an ebay &#8211; gemeinsam mit dem zweiten Parameter, der die zu verwendende API-Funktion betitelt (hier <b>findItemsAdvanced<\/b>), und dem dritten Parameter, der mit <b>strURL <\/b>die URL des Dienstes &uuml;bermittelt. Das Ergebnis dieser Funktion speichern wir in der Variablen <b>objResponse<\/b>. Wenn Sie das enthaltene Dokument ausgeben, sieht dieses etwa wie in Listing 3 aus.<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\r\n&lt;findItemsAdvancedResponse xmlns=\"http:\/\/www.ebay.com\/marketplace\/search\/v1\/services\"&gt;\r\n     &lt;ack&gt;Success&lt;\/ack&gt;\r\n     &lt;version&gt;1.13.0&lt;\/version&gt;\r\n     &lt;timestamp&gt;2016-04-28T08:55:38.247Z&lt;\/timestamp&gt;\r\n     &lt;searchResult count=\"1\"&gt;\r\n         &lt;item&gt;\r\n             &lt;itemId&gt;371579033519&lt;\/itemId&gt;\r\n             &lt;title&gt;Microsoft Office 365 &amp; Access 2016 9781305870611 by Mary Z. Last, Paperback, NEW&lt;\/title&gt;\r\n             &lt;globalId&gt;EBAY-DE&lt;\/globalId&gt;\r\n             &lt;primaryCategory&gt;\r\n                 &lt;categoryId&gt;171265&lt;\/categoryId&gt;\r\n                 &lt;categoryName&gt;Computer &amp; Internet&lt;\/categoryName&gt;\r\n             &lt;\/primaryCategory&gt;\r\n             &lt;galleryURL&gt;http:\/\/thumbs4.ebaystatic.com\/m\/mQUV5CKwKUtkjzHjCF4CSnQ\/140.jpg&lt;\/galleryURL&gt;\r\n             &lt;viewItemURL&gt;http:\/\/www.ebay.de\/itm\/Microsoft-Office-365-Access-2016-9781305870611-by-Mary-Z\r\n             -Last-Paper back-NEW-\/371579033519&lt;\/viewItemURL&gt;\r\n             &lt;paymentMethod&gt;PayPal&lt;\/paymentMethod&gt;\r\n             &lt;autoPay&gt;true&lt;\/autoPay&gt;\r\n             &lt;postalCode&gt;60954&lt;\/postalCode&gt;\r\n             &lt;location&gt;Vereinigte Staaten von Amerika&lt;\/location&gt;\r\n             &lt;country&gt;US&lt;\/country&gt;\r\n             &lt;shippingInfo&gt;\r\n                 &lt;shippingServiceCost currencyId=\"EUR\"&gt;0.0&lt;\/shippingServiceCost&gt;\r\n                 &lt;shippingType&gt;Free&lt;\/shippingType&gt;\r\n                 &lt;shipToLocations&gt;DE&lt;\/shipToLocations&gt;\r\n             &lt;\/shippingInfo&gt;\r\n             &lt;sellingStatus&gt;\r\n                 &lt;currentPrice currencyId=\"EUR\"&gt;139.98&lt;\/currentPrice&gt;\r\n                 &lt;convertedCurrentPrice currencyId=\"EUR\"&gt;139.98&lt;\/convertedCurrentPrice&gt;\r\n                 &lt;sellingState&gt;Active&lt;\/sellingState&gt;\r\n                 &lt;timeLeft&gt;P19DT23H43M50S&lt;\/timeLeft&gt;\r\n             &lt;\/sellingStatus&gt;\r\n             &lt;listingInfo&gt;...&lt;\/listingInfo&gt;\r\n             &lt;condition&gt;\r\n                 &lt;conditionId&gt;1000&lt;\/conditionId&gt;\r\n                 &lt;conditionDisplayName&gt;Neu&lt;\/conditionDisplayName&gt;\r\n             &lt;\/condition&gt;\r\n             &lt;isMultiVariationListing&gt;false&lt;\/isMultiVariationListing&gt;\r\n             &lt;topRatedListing&gt;true&lt;\/topRatedListing&gt;\r\n         &lt;\/item&gt;\r\n     &lt;\/searchResult&gt;\r\n     &lt;paginationOutput&gt;\r\n         &lt;pageNumber&gt;1&lt;\/pageNumber&gt;\r\n         &lt;entriesPerPage&gt;1&lt;\/entriesPerPage&gt;\r\n         &lt;totalPages&gt;5&lt;\/totalPages&gt;\r\n         &lt;totalEntries&gt;5&lt;\/totalEntries&gt;\r\n     &lt;\/paginationOutput&gt;\r\n     &lt;itemSearchURL&gt;http:\/\/www.ebay.de\/sch\/i.html_nkw=Microsoft+Access+2016&amp;_ddo=1&amp;_ipg=1&amp;_pgn=1&lt;\/itemSearchURL&gt;\r\n&lt;\/findItemsAdvancedResponse&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Response-Dokument mit einem Suchergebnis<\/span><\/b><\/p>\n<p>Hier interessiert uns zun&auml;chst das Root-Element <b>find-Items-Ad-van-ced-Response<\/b>, das wir mit der <b>SelectSingleNode<\/b>-Funktion des Objekts <b>objResponse <\/b>referenzieren. Dieses ben&ouml;tigen wir, um es an die Funktion <b>ProcessSearchResult <\/b>weiterzuleiten, welche die f&uuml;r uns interessanten Informationen aus den einzelnen <b>item<\/b>-Elementen des Dokuments ausliest &#8211; zum Beispiel den Titel des Artikels sowie den Preis. Beide sollen in der weiter oben vorgestellten Tabelle <b>tblSuchergebnisse <\/b>landen.<\/p>\n<p>Au&szlig;erdem ist der untere Teil des Dokuments sehr inte-ressant f&uuml;r uns: Hier stecken n&auml;mlich die Informationen, wie viele Seiten uns erwarten, wenn wir die angegebene Anzahl der Suchergebnisse pro Seite abrufen. Diese Information steckt im Element <b>findItemsAdvancedResponse\/paginationOutput\/totalPages<\/b>. Wir erhalten diese ebenfalls &uuml;ber die <b>SelectSingleNode<\/b>-Methode. Allerdings speichern wir diesmal nicht das komplette Element in einer <b>IXMLDomElement<\/b>-Variablen, sondern greifen mit der Eigenschaft <b>NodeTypedValue <\/b>direkt auf den Inhalt dieses Elements zu. Sollte f&uuml;r die aktuell eingelesene Seite die Anzahl der Gesamtseiten aus <b>intSeitenGesamt <\/b>bereits gr&ouml;&szlig;er als die maximal verf&uuml;gbaren Seiten sein, bricht die Prozedur an dieser Stelle ab. Es macht ja keinen Sinn, leere Seiten abzurufen, was sonst geschehen w&uuml;rde.<\/p>\n<h2>Erstellen der Suchanfrage<\/h2>\n<p>Die Funktion <b>CreateFindItemsAdvancedRequest <\/b>stellt eine einfache Suchanfrage zusammen (s. Listing 4). Dazu erwartet sie die folgenden Parameter:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>CreateFindItemsAdvancedRequest(strSuchbegriffe<span style=\"color:blue;\"> As String<\/span>, intAnzahl<span style=\"color:blue;\"> As Integer<\/span>, _\r\n     <span style=\"color:blue;\"><\/span>     intSeite<span style=\"color:blue;\"> As Integer<\/span>) <span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objRequest<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objRoot<span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMElement\r\n     <span style=\"color:blue;\">Dim <\/span>objPaginationInput<span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMElement\r\n     <span style=\"color:blue;\">Set<\/span> objRequest = <span style=\"color:blue;\">New<\/span> MSXML2.DOMDocument\r\n     AddPI objRequest\r\n     <span style=\"color:blue;\">Set<\/span> objRoot = CreateSubElement(objRequest, \"findItemsAdvancedRequest\")\r\n     CreateAttribute objRoot, \"xmlns\", \"http:\/\/www.ebay.com\/marketplace\/search\/v1\/services\"\r\n     CreateSubElement objRoot, \"keywords\", strSuchbegriffe\r\n     <span style=\"color:blue;\">Set<\/span> objPaginationInput = CreateSubElement(objRoot, \"paginationInput\")\r\n     CreateSubElement objPaginationInput, \"entriesPerPage\", CStr(intAnzahl)\r\n     CreateSubElement objPaginationInput, \"pageNumber\", CStr(intSeite)\r\n     <span style=\"color:blue;\">Set<\/span> CreateFindItemsAdvancedRequest = objRequest\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Funktion zum Zusammenstellen der Suchanfrage<\/span><\/b><\/p>\n<ul>\n<li><b>strSuchbegriffe<\/b>: Suchbegriff<\/li>\n<li><b>intAnzahl<\/b>: Anzahl der zur&uuml;ckzuliefernden Suchergebnisse<\/li>\n<li><b>intSeite<\/b>: Seite, die abgefragt werden soll<\/li>\n<\/ul>\n<p>Die Funktion erstellt ein neues Objekt des Typs <b>DOMDocument<\/b>, also ein XML-Dokument. Dieses speichert sie in der Variablen <b>objRequest<\/b>. Die Funktion <b>AddPI <\/b>ist eine kleine Hilfsfunktion, welche die folgende Zeile als erste Zeile des XML-Dokuments einf&uuml;gt:<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;<\/pre>\n<p>Diese Funktion sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AddPI(objXML<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument)\r\n     <span style=\"color:blue;\">Dim <\/span>objPI<span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMProcessingInstruction\r\n     <span style=\"color:blue;\">Set<\/span> objPI = objXML.createProcessingInstruction(\"xml\",  \"version=\"\"1.0\"\" encoding=\"\"utf-8\"\"\")\r\n     objXML.appendChild objPI\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Danach erstellt die Funktion <b>CreateFindItemsAdvancedRequest <\/b>das Root-Element <b>findItemsAdvancedRequest <\/b>(an dieser Stelle der Hinweis, dass Gro&szlig;-\/Kleinschreibung bei Verwendung von Web-APIs mit XML-Dokumenten essentiell ist). Die Funktion <b>CreateSubElement<\/b> nimmt uns eine Menge Arbeit ab, denn sie erzeugt <b>IXMLDOMElement<\/b>-Elemente (s. Listing 5). Dazu &uuml;bergeben wir ihr drei Parameter:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>CreateSubElement(objElement<span style=\"color:blue;\"> As Object<\/span>, strElementname<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> strText<span style=\"color:blue;\"> As String<\/span>) _\r\n        <span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMElement\r\n     <span style=\"color:blue;\">Dim <\/span>strTypename<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objDocument<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objXMLElement<span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMElement\r\n     strTypename = TypeName(objElement)\r\n     Select Case strTypename\r\n         <span style=\"color:blue;\">Case <\/span>\"DOMDocument\"\r\n             <span style=\"color:blue;\">Set<\/span> objXMLElement = objElement.createElement(strElementname)\r\n             objElement.appendChild objXMLElement\r\n         <span style=\"color:blue;\">Case <\/span>\"IXMLDOMElement\"\r\n             <span style=\"color:blue;\">Set<\/span> objDocument = objElement.ownerDocument\r\n             <span style=\"color:blue;\">Set<\/span> objXMLElement = objDocument.createElement(strElementname)\r\n             objElement.appendChild objXMLElement\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strText) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         objXMLElement.Text = strText\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> CreateSubElement = objXMLElement\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Funktion zum Erstellen eines XML-Elements<\/span><\/b><\/p>\n<ul>\n<li>das Objekt, unter dem das neue Objekt angelegt werden soll,<\/li>\n<li>den Namen des neuen Objekts sowie<\/li>\n<li>optional den Wert des neuen Objekts.<\/li>\n<\/ul>\n<p>Die Funktion liefert ein Objekt des Typs <b>IXMLDOMElement <\/b>zur&uuml;ck, das wir referenzieren und gegebenenfalls dazu nutzen k&ouml;nnen, weitere Unterelemente anzulegen. Die folgende Anweisung der Funktion <b>CreateFindItems-AdvancedRequest <\/b>f&uuml;gt dem Root-Element die Eigenschaft <b>xmlns <\/b>hinzu und f&uuml;llt diese mit dem Wert <b>http:\/\/www.ebay.com\/marketplace\/search\/v1\/services<\/b>. Dazu nutzt sie eine weitere Hilfsfunktion namens <b>CreateAttribute<\/b>, die das mit dem Attribut auszustattende Element, den Attributnamen und den Attributwert als Parameter erwartet (s. Listing 6).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreateAttribute(objElement<span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMElement, strAttributename<span style=\"color:blue;\"> As String<\/span>, _\r\n         strAttributeValue<span style=\"color:blue;\"> As String<\/span>)\r\n     objElement.setAttribute strAttributename, strAttributeValue\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Funktion zum Hinzuf&uuml;gen eines XML-Attributs<\/span><\/b><\/p>\n<p>Nun f&uuml;gt die Prozedur ein Unterelement zum Element aus <b>objRoot <\/b>hinzu. Dieses hei&szlig;t <b>keywords <\/b>und soll die mit der Variablen <b>strSuchbegriffe <\/b>&uuml;bergebenen Suchkriterien aufnehmen.<\/p>\n<p>Schlie&szlig;lich fehlen noch die Informationen, wie viele Eintr&auml;ge das Suchergebnis enthalten und die wievielte Seite geliefert werden soll. Dazu legt die Funktion erst das Element <b>paginationInput <\/b>und dann die Unterelemente <b>entriesPerPage <\/b>und <b>pageNumber <\/b>an, f&uuml;r die sie die entsprechenden Werte aus den Variablen <b>intAnzahl <\/b>und <b>intSeite <\/b>hinterlegt.<\/p>\n<p>Das Ergebnis aus der Variablen <b>objRequest <\/b>gibt die Funktion dann schlie&szlig;lich als Funktionswert an die aufrufende Prozedur zur&uuml;ck.<\/p>\n<h2>Anfrage an die Finding-API von ebay senden<\/h2>\n<p>Die n&auml;chste Funktion namens <b>FindingAPIRequest<\/b> soll den zuvor erstellten XML-Request an die Finding API von ebay schicken und das Resultat entgegennehmen. Au&szlig;erdem sind nat&uuml;rlich noch einige weitere Schritte durchzuf&uuml;hren, die wir uns nun ansehen (s. Listing 7).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FindingAPIRequest(objRequest<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument, strOperationName<span style=\"color:blue;\"> As String<\/span>, strAppID<span style=\"color:blue;\"> As String<\/span>) \r\n        <span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objXMLHTTPRequest<span style=\"color:blue;\"> As <\/span>MSXML2.XMLHTTP\r\n     <span style=\"color:blue;\">Dim <\/span>objResponse<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>strURL<span style=\"color:blue;\"> As String<\/span>\r\n     strURL = \"http:\/\/svcs.ebay.com\/services\/search\/FindingService\/v1\"\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTPRequest = <span style=\"color:blue;\">New<\/span> MSXML2.XMLHTTP\r\n     <span style=\"color:blue;\">With<\/span> objXMLHTTPRequest\r\n         .Open \"POST\", strURL, <span style=\"color:blue;\">False<\/span>\r\n         .setRequestHeader \" X-EBAY-SOA-OPERATION-NAME\", strOperationName\r\n         .setRequestHeader \"X-EBAY-SOA-SECURITY-APPNAME\", strAppID\r\n         .setRequestHeader \"X-EBAY-SOA-GLOBAL-ID\", \"EBAY-DE\"\r\n         .send objRequest\r\n         <span style=\"color:blue;\">If <\/span>.Status = 200<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objResponse = .responseXML\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"Aufruf fehlgeschlagen, keine Antwort. Status: \" & .Status\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> FindingAPIRequest = objResponse\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Funktion zum Senden der Anfrage an die Finding-API von ebay<\/span><\/b><\/p>\n<p>Die Funktion erwartet die folgenden Parameter:<\/p>\n<ul>\n<li><b>objRequest<\/b>: Objektvariable mit dem Request als <b>DOMDocument<\/b>-Objekt<\/li>\n<li><b>strOperationName<\/b>: Name der durchzuf&uuml;hrenen Operation (es gibt neben <b>findItemsAdvanced <\/b>noch weitere m&ouml;gliche Funktionen).<\/li>\n<li><b>strAppID<\/b>: <b>AppID <\/b>f&uuml;r diese Abfrage.<\/li>\n<\/ul>\n<p>Der Request wird &uuml;ber ein Objekt des Typs <b>XMLHTTP <\/b>durchgef&uuml;hrt, das unter dem Namen <b>objXMLHTTPRequest <\/b>deklariert wird. F&uuml;r die Antwort sehen wir das Objekt <b>objResponse <\/b>des Typs <b>DOMDocument <\/b>vor.<\/p>\n<p>Die URL f&uuml;r den Zugriff auf die Finding-API lautet f&uuml;r den Zugriff auf den <b>Production<\/b>-Service wie folgt &#8211; wir beziehen sie aus dem Parameter <b>strURL<\/b>:<\/p>\n<pre>http:\/\/svcs.ebay.com\/services\/search\/FindingService\/v1<\/pre>\n<p>Dann erstellen wir eine neue Instanz des <b>XMLHTTP<\/b>-Objekts und speichern es in <b>objXMLHTTPRequest<\/b>. Wir &ouml;ffnen den Zugriff mit der <b>Open<\/b>-Methode und setzen mit einigen Request-Headern verschiedene Eigenschaften f&uuml;r die Anfrage: den Namen der Operation aus <b>strOperationName<\/b>, die <b>AppID <\/b>aus <b>strAppID <\/b>und die Angabe der ebay-Seite, die wir abfragen wollen &#8211; in diesem Fall haben wir <b>EBAY-DE <\/b>f&uuml;r die deutsche Seite hart in die Prozedur codiert.<\/p>\n<p>Auch diese Option k&ouml;nnen Sie nat&uuml;rlich noch in die Optionentabelle und das Optionenformular &uuml;bertragen und parametrisieren.<\/p>\n<p>Danach sendet die Funktion das Anfrage-Objekt <b>objRequest <\/b>mit der <b>send<\/b>-Methode an den Service. Meldet dies den Status-Wert <b>200<\/b>, war der Zugriff erfolgreich und <b>responseXML <\/b>liefert ein XML-Antwortdokument, das wir in <b>objResponse <\/b>speichern. Anderenfalls gibt die Funktion eine Meldung aus. <b>objResponse <\/b>wird als Funktionswert zur&uuml;ckgegeben.<\/p>\n<h2>Ergebnis auswerten<\/h2>\n<p>Mit jedem Durchlauf der <b>For&#8230;Next<\/b>-Schleife der Funktion <b>FindItemsAdvanced <\/b>wird eine Seite mit Ergebnissen abgerufen und in der Variablen <b>objResponse <\/b>gespeichert. Bevor dort die n&auml;chste Seite eingelesen wird, sollen die Ergebnisse weiterverarbeitet werden &#8211; indem wir das Dokument analysieren und die Daten der enthaltenen Such-ergebnisse in die Tabelle <b>tblSuchergebnisse <\/b>eintragen.<\/p>\n<p>Dies erledigt die Prozedur <b>ProcessSearchResult<\/b>, die lediglich das Antwort-XML-Dokument aus <b>objResponse <\/b>als Parameter erwartet (s. Listing 8). In einer <b>For Each<\/b>-Schleife durchl&auml;uft die Prozedur dann alle Elemente, welche die <b>SelectNodes<\/b>-Eigenschaft mit dem Suchausdruck <b>searchResult\/item <\/b>hervorbringt, und speichert diese jeweils in der Variablen <b>objItem<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ProcessSearchResult(objResponse<span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMElement)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strTitel<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>sngPreis<span style=\"color:blue;\"> As Single<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strURL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objItem<span style=\"color:blue;\"> As <\/span>MSXML2.IXMLDOMElement\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each objItem In objResponse.SelectNodes(\"searchResult\/item\")\r\n         strTitel = objItem.SelectSingleNode(\"title\").nodeTypedValue\r\n         strTitel = <span style=\"color:blue;\">Replace<\/span>(strTitel, \"''\", \"''''\")\r\n         sngPreis = objItem.SelectSingleNode(\"sellingStatus\/currentPrice\").nodeTypedValue \/ 100\r\n         strURL = objItem.SelectSingleNode(\"viewItemURL\").nodeTypedValue\r\n         db.Execute \"INSERT INTO tblSuchergebnisse(Artikel, Preis, URL) VALUES(''\" & strTitel & \"'', \" _\r\n             & <span style=\"color:blue;\">Replace<\/span>(sngPreis, \",\", \".\") & \", ''\" & strURL & \"'')\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> objItem\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 8: Diese Prozedur wertet den Inhalt des Antwort-Dokuments aus und tr&auml;gt die gefundenen Daten in die Tabelle tblSuchergebnisse ein.<\/span><\/b><\/p>\n<p>Den Titel ermitteln wir mit <b>SelectSingleNode <\/b>aus dem Elementtitel, den aktuellen Preis aus <b>sellingStatus\/currentPrice<\/b>. Die URL liefert das Element <b>viewItemURL<\/b>. Alle drei tr&auml;gt die Prozedur dann mit einer <b>INSERT INTO<\/b>-Aktionssabfrage in die Tabelle <b>tblSuchergebnisse <\/b>ein.<\/p>\n<p>Auf diese Weise durchlaufen die vorgestellten Prozeduren und Funktionen alle von ebay zur&uuml;ckgelieferten Daten und speichern diese in der Tabelle <b>tblSuchergebnisse<\/b>. Diese werden dann im ausl&ouml;senden Formular <b>frmArtikelSuchen <\/b>im Unterformular <b>sfmSuchergebnis <\/b>abgebildet.<\/p>\n<h2>Weitere M&ouml;glichkeiten der FindItemsAdvanced-Funktion<\/h2>\n<p>Selbst die Optionen dieser Funktion haben wir noch nicht vollst&auml;ndig ausgenutzt.<\/p>\n<ul>\n<li>Da gibt es beispielsweise noch das Element <b>aspectFilter<\/b>. Mit diesem k&ouml;nnen Sie die je nach Kategorie unterschiedlichen speziellen Eigenschaften durchsuchen, indem Sie den Namen der Eigenschaft angeben und den gew&uuml;nschten Wert &#8211; zum Beispiel, um nur nach Schuhen mit einer bestimmten Schuhgr&ouml;&szlig;e zu suchen.<\/li>\n<li>Mit dem <b>categoryId<\/b>-Element k&ouml;nnen Sie festlegen, dass nur eine bestimmte Kategorie von Artikeln durchsucht werden soll.<\/li>\n<li>Das Element <b>descriptionSearch <\/b>erlaubt es, auch die Beschreibungstexte von Artikeln nach Schl&uuml;sselw&ouml;rtern zu durchsuchen. Dazu stellen Sie den Wert auf <b>true <\/b>ein.<\/li>\n<li>Unter <b>itemFilter <\/b>k&ouml;nnen Sie verschiedene Filterkriterien festlegen, die sich auf die verkaufsbezogenen Attribute beziehen &#8211; also beispielsweise die Dauer eines Angebots, nur autorisierte Verk&auml;ufer, den Artikelzustand, die W&auml;hrung, Ausschluss bestimmter Kategorien oder Verk&auml;ufer, nur kostenloser Versand et cetera. Mehr Informationen hierzu unter <b>http:\/\/developer.ebay.com\/devzone\/finding\/CallRef\/types\/ItemFilterType.html<\/b>.<\/li>\n<li>Bez&uuml;glich der Schl&uuml;sselw&ouml;rter im Element <b>keywords<\/b> ist noch zu sagen, dass hier &auml;hnliche Regeln wie bei der Suche unter Google gelten. Zwei W&ouml;rter mit Leerzeichen werden etwa mit <b>AND<\/b> verbunden oder exakte Phrasen mehrerer W&ouml;rter in Anf&uuml;hrungszeichen eingefasst. Mehr Informationen hierzu unter <b>http:\/\/developer.ebay.com\/devzone\/finding\/Concepts\/FindingAPIGuide.html#usekeywords<\/b>.<\/li>\n<li>Mit dem Element <b>outputSelector<\/b> legen Sie fest, welche weiteren Werte neben den Standarddaten zur&uuml;ckgeliefert werden &#8211; beispielsweise, um die verschiedenen unter <b>aspectFilter <\/b>nutzbaren Eigenschaften einer Kategorie zu ermitteln, die Kategorien der Suchergebnisse zu identifizieren, Bilder herunterzuladen oder weitere Informationen zu Verk&auml;ufern oder Stores zu erhalten. Weitere Informationen: <b>http:\/\/developer.ebay.com\/devzone\/finding\/CallRef\/extra\/fndItmsAdvncd.Rqst.tptSlctr.html<\/b><\/li>\n<li>Mit dem <b>affiliate<\/b>-Element legen Sie fest, ob beispielsweise URLs mit Daten f&uuml;r den Einsatz unter Partnerprogrammen geliefert werden sollen.<\/li>\n<li><b>buyerPostalCode<\/b> erm&ouml;glicht es, nur Angebote aus der N&auml;he zu suchen.<\/li>\n<li><b>sortOrder<\/b>: Legt die Sortierung fest, also beispielsweise <b>BestMatch<\/b>. Weitere M&ouml;glichkeiten: <b>http:\/\/developer.ebay.com\/devzone\/finding\/CallRef\/extra\/fndItmsAdvncd.Rqst.srtOrdr.html<\/b><\/li>\n<\/ul>\n<p>Wenn Sie die Suche um eine der genannten M&ouml;glichkeiten erweitern, erweitern Sie das Formular <b>frmArtikelSuchen <\/b>um Felder zur Eingabe der gew&uuml;nschten Kriterien.<\/p>\n<p>Diese &uuml;bergeben Sie dann bis zur Funktion <b>CreateFind-ItemsAdvancedRequest<\/b>, wo Sie die zus&auml;tzlich ben&ouml;tigten Elemente mit der Funktion <b>CreateSubElement <\/b>hinzuf&uuml;gen.<\/p>\n<h2>Weitere Funktionen der Finding-API<\/h2>\n<p>Die Finding-API bietet neben der hier vorgestellten Funktion <b>FindItemsAdvanced <\/b>noch einige weitere Features.<\/p>\n<p>Eine Auflistung finden Sie auf der Seite <b>http:\/\/developer.ebay.com\/devzone\/finding\/CallRef\/index.html<\/b>.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>In zuk&uuml;nftigen Beitr&auml;gen schauen wir uns die aktuelle Programmierung weiterer Funktionen an, beispielsweise das Einstellen von Artikeln &uuml;ber die Trading-API.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>accessBay.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{C526C7F0-E663-4FCB-9E69-9D465DC71A7E}\/aiu_1042.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bereits im Jahr 2009 haben wir gezeigt, wie Sie von Access aus Daten von ebay auslesen und selbst Angebote einstellen. &Uuml;ber die Jahre &auml;ndern sich jedoch die Mechanismen einer solchen Online-Schnittstelle, also schauen wir uns in diesem Beitrag an, wie der aktuelle Zugriff auf ebay aussieht und wie Sie diesen von einer Access-Anwendung aus realisieren. Dazu legen wir einen neuen Benutzer- und Entwickler-Account an und erstellen dann die notwendigen Objekte, um von Access aus auf die Daten zuzugreifen.<\/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":[662016,66032016,44000027],"tags":[],"class_list":["post-55001042","post","type-post","status-publish","format-standard","hentry","category-662016","category-66032016","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>ebay-Zugriff 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\/ebayZugriff_mit_Access\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ebay-Zugriff mit Access\" \/>\n<meta property=\"og:description\" content=\"Bereits im Jahr 2009 haben wir gezeigt, wie Sie von Access aus Daten von ebay auslesen und selbst Angebote einstellen. &Uuml;ber die Jahre &auml;ndern sich jedoch die Mechanismen einer solchen Online-Schnittstelle, also schauen wir uns in diesem Beitrag an, wie der aktuelle Zugriff auf ebay aussieht und wie Sie diesen von einer Access-Anwendung aus realisieren. Dazu legen wir einen neuen Benutzer- und Entwickler-Account an und erstellen dann die notwendigen Objekte, um von Access aus auf die Daten zuzugreifen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T18:59:44+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/2d7d22bbdce241e28511883126084a54\" \/>\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=\"28\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"ebay-Zugriff mit Access\",\"datePublished\":\"2020-05-22T18:59:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/\"},\"wordCount\":4621,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/2d7d22bbdce241e28511883126084a54\",\"articleSection\":[\"2016\",\"3\\\/2016\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/\",\"name\":\"ebay-Zugriff mit Access - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/2d7d22bbdce241e28511883126084a54\",\"datePublished\":\"2020-05-22T18:59:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/2d7d22bbdce241e28511883126084a54\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/2d7d22bbdce241e28511883126084a54\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/ebayZugriff_mit_Access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ebay-Zugriff 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-Zugriff 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\/ebayZugriff_mit_Access\/","og_locale":"de_DE","og_type":"article","og_title":"ebay-Zugriff mit Access","og_description":"Bereits im Jahr 2009 haben wir gezeigt, wie Sie von Access aus Daten von ebay auslesen und selbst Angebote einstellen. &Uuml;ber die Jahre &auml;ndern sich jedoch die Mechanismen einer solchen Online-Schnittstelle, also schauen wir uns in diesem Beitrag an, wie der aktuelle Zugriff auf ebay aussieht und wie Sie diesen von einer Access-Anwendung aus realisieren. Dazu legen wir einen neuen Benutzer- und Entwickler-Account an und erstellen dann die notwendigen Objekte, um von Access aus auf die Daten zuzugreifen.","og_url":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T18:59:44+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/2d7d22bbdce241e28511883126084a54","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"28\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"ebay-Zugriff mit Access","datePublished":"2020-05-22T18:59:44+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/"},"wordCount":4621,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/2d7d22bbdce241e28511883126084a54","articleSection":["2016","3\/2016","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/","url":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/","name":"ebay-Zugriff mit Access - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/2d7d22bbdce241e28511883126084a54","datePublished":"2020-05-22T18:59:44+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/2d7d22bbdce241e28511883126084a54","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/2d7d22bbdce241e28511883126084a54"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/ebayZugriff_mit_Access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"ebay-Zugriff 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\/55001042","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=55001042"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001042\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}