Verwendung der Amazon-Product-Advertising-API in PHP

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.

5 Gedanken zu “Verwendung der Amazon-Product-Advertising-API in PHP

  1. Pingback: Verwendung der eBay-Finding-API in PHP | AB-WebLog.com

    • 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

Einen Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>