Nachdem ich mit einem Beispiel zur eBay-Finding-API in einem vorangegangenen Beitrag begonnen habe, möchte ich nun mit der Amazon-Product-Advertising-API fortfahren.
Wieder müssen wir mit der Registrierung für einen kostenlosen Amazon-Web-Services-Account. Um Geld mit Ihrem Amazon-Traffic zu verdienen, müssen Sie sich zusätzlich beim Amazon-Partnernetze beginnen.
Nun können wir mit dem Zusammensetzen einer Abfrage-URL für die Amazon-Product-Advertising-API beginnen:
http://ecs.amazonaws.de/onca/xml? AWSAccessKeyId=%awsAccessKeyId%& AssociateTag=%associateTag%& ItemPage=%itemPage%& Keywords=%keywords%& Operation=%operation%& ResponseGroup=%responseGroup%& SearchIndex=%categoryId%& Service=AWSECommerceService& Timestamp=%timestamp%& Signature=%signature%
Hier ist eine Erklärung zu den jeweiligen Parametern:
- ecs.amazonaws.de: Je nachdem, welches Land Sie verwenden möchten, müssen Sie einen bestimmten Endpunkt (Englisch) verwenden. Für Deutschland ist es ecs.amazonaws.de.
- AWSAccessKeyId: Diesen Zugriffsschlüssel erhalten Sie in Ihrem Amazon-Web-Services-Account.
- ItemPage: Für die erste Abfrage setzen Sie dies auf 1 und erhöhen es in weiteren Abfragen, wenn Sie mehr Artikel benötigen. Jede Antwort enthält bis zu 10 Artikel (dies kann nicht geändert werden).
- Keywords: Ihre Suchbegriffe. Stellen Sie sicher, dass Sie hier rawurlencode verwenden.
- Operation: Der Name der Operation der Amazon-Product-Advertising-API, die Sie aufrufen möchten. Für die Schlüsselwort-Suche nehmen wir ItemSearch (Englisch).
- ResponseGroup: Je nachdem wie detailliert Sie die Antwort benötigen, können Sie eine sinnvolle Antwortgruppe (Englisch). I verwende meistens Medium für Artikelsuchen.
- SearchIndex: Ein Such-Index (Englisch) ist eine Art oberste Kategorie. Wenn Sie in allem suchen möchten, wählen Sie einfach All.
- Service: Verwenden Sie hier einfach AWSECommerceService.
- Timestamp:Zeitstempel, der in PHP wie folgt generiertert wird:
rawurlencode(gmdate('Y-m-d\TH:i:s\Z'))
- Signature: Das ist der witzigste Teil: Bitte lesen Sie unten, wie Sie diese Signatur generieren können.
Um eine gültige API-Anfrage senden zu können, müssen Sie die Signatur wie folgt berechnen:
$request = "GET\necs.amazonaws.de\n/onca/xml\n"; $request .= "AWSAccessKeyId=%awsAccessKeyId%&AssociateTag=%associateTag%&ItemPage=%itemPage%&Keywords=%keywords%&Operation=%operation%&ResponseGroup=%responseGroup%&SearchIndex=%categoryId%&Service=AWSECommerceService&Timestamp=%timestamp%"; $signature = rawurlencode(base64_encode(hash_hmac('sha256', $request, %secretKey%, true)));
Den benötigten %secretKey% erhalten Sie auch in Ihrem Amazon-Web-Services-Account.
Wenn Sie alles richtig umgesetzt haben, können Sie die erzeugte URL dieser Funktion, die wir bereits für die Abfrage bei der eBay-Finding-API verwendet haben, übergeben und die XML-Dokument-Antwort der API auswerten:
/** * Gibt das SimpleXML-Objekt zurück. * * @param string $url Die URL, von der das XML-Dokument abgefragt werden soll. * @return string Das SimpleXML-Objekt. * */ function getXml($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $result = curl_exec($ch); curl_close($ch); return simplexml_load_string($result); }
Leider muss ich sagen, dass ich die Amazon-Product-Advertising-API für sehr verwirrend und schlecht dokumentiert halte. Besonders, wenn Sie mit diesen Such-Indizes und Kategorien (sogenannten nodes) arbeiten müssen, macht das alles andere als Spaß. Und es gibt nicht nur Sachen, die in der Amazon-Product-Advertising-API-Dokumentation schlecht, sondern schlichtweg auch falsch dokumentiert sind.
Was ist Ihre Meinung zu der Amazon-Product-Advertising-API?
Der Artikel ist auch in English verfügbar.
Pingback: Verwendung der eBay-Finding-API in PHP | AB-WebLog.com
Interessanter Bericht. Hbe das mal probiert, bekomme auch eine Buchliste zurückgeliefert, allderings keine Preise dazu. Wie kommt das?
Hallo Marc,
dafür könnte es mehrere Gründe geben, sodass eine pauschale Aussage hierzu schwierig ist. Ggf. mal mit einem anderen SearchIndex testen oder eine andere ResponseGroup verwenden.
Tut mir leid, aber mehr kann ich so auf Anhieb leider nicht weiter helfen.
Beste Grüße
Andreas Breitschopp
ResponseGroup !
War doch ein prima Hinweis
Danke!
Hallo Marc,
freut mich, wenn ich helfen konnte!
Beste Grüße
Andreas