Seit der Veröffentlichung von Toby Segarans Buch „Programming Collective Intelligence – Building Smart Web 2.0 Applications“ hat sich die eBay API verändert. Zusätzlich zur Trading API wurde eine sog. Finding API eingeführt. Von den Änderungen durch die Finding API ist der Aufruf der Suche nach Artikeln betroffen; die Suche nach einer Kategorie und das Auslesen eines einzelnen Objekts bleiben Bestandteil der Trading API.

def getHeaders()

Fangen wir mit den Header-Daten der Anfrage an. In „Programming Collective Intelligence“ kommen Header mit dem Präfix X-EBAY-API zum Einsatz, inzwischen wurden sie allerdings durch neue Parameter mit dem Präfix X-EBAY-SOA ersetzt. Es folgt eine Liste mit allen alten Parametern in Segarans Buch und den neuen Parametern:

  • X-EBAY-API-COMPATIBILITY-LEVEL: wird nicht mehr benötigt
  • X-EBAY-API-APP-NAME: X-EBAY-SOA-SECURITY-APPNAME
  • X-EBAY-API-DEV-NAME: wird nicht mehr benötigt
  • X-EBAY-API-CERT-NAME: wird nicht mehr benötigt
  • X-EBAY-API-CALL-NAME: X-EBAY-SOA-OPERATION-NAME
  • X-EBAY-API-SITEID: X-EBAY-SOA-GLOBAL-ID (hier haben sich auch die Werte geändert, man gibt nun Strings wie z.B. „EBAY-US“ an)

Meine Header-Methode sieht daher nun folgendermaßen aus:

def getHeadersFinding(apicall, globalId="EBAY-US"):
    headers = {"X-EBAY-SOA-SECURITY-APPNAME": appKey,
               "X-EBAY-SOA-OPERATION-NAME": apicall,
               "X-EBAY-SOA-SERVICE-VERSION": "1.3.0",
               "X-EBAY-SOA-GLOBAL-ID": globalId,
               "Content-Type": "text/xml;charset=utf-8"}
return headers

def doSearch()

Auch die XML-API hat sich geändert, es müssen nun neue Befehle versendet werden. Bei den meisten Tags hat sich lediglich die Groß- und Kleinschreibung geändert, Tagnamen beginnen nun mit kleinem Buchstaben und gehen dann im CamelCase weiter. Zusätzlich wurde aus ID in der neuen API Id. Das Schlüsselwort Query hat sich komplett verändert und muss durch **keyword **ersetzt werden. Geändert hat sich auch der Namespace, er lautet inzwischen http://www.ebay.com/marketplace/search/v1/services.

Wichtig ist auch, dass man das XML-Tag am Beginn der Anfrage weglassen muss, da eBay ansonsten einen Fehler meldet (“Unable to create xml stream reader for XML: payload format incorrect or payload is empty”). Die RequesterCredentials mit dem User-Token kann man sich in der neuen Finding API sparen. Der User-Token stellt nämlich einen Schlüssel zu einem echten eBay-Account dar und wird nur benötigt, wenn man mit der Trading API auf eBay agieren will.

Ein korrekter Payload sieht z.B. so aus:

<finditemsadvancedrequest xmlns="http://www.ebay.com/marketplace/search/v1/services">
    <paginationinput>
        <entriesperpage>200</entriesperpage>
        <pagenumber>1</pagenumber>
    </paginationinput>
    <keywords>laptop</keywords>
<finditemsadvancedrequest>

def getCategory() und def getItem()

Die Methoden getCategory() und getItem() sind von den Änderungen nicht betroffen, sie arbeiten weiterhin über die Trading API und verlangen daher auch weiterhin einen User-Token. Ebenfalls muss der Aufruf der alten X-EBAY-API-Header erfolgen.

I do not maintain a comments section. If you have any questions or comments regarding my posts, please do not hesitate to send me an e-mail to blog@stefan-koch.name.