Amazons API – Teil 3 (Abfrage mit PHP)

“Alle guten Dinge sind 3″ – Getreu dem Motto geht es jetzt richtig los. Wir werden eine Abfrage an die Product Advertising API von Amazon mithilfe von PHP tätigen. Damit auch alles reibunglos klappt und das Beispiel auch bei euch nachvollziehbar ist, überprüft bitte noch einmal ob ihr alle erwähnten Grundvoraussetzungen aus dem 1. Teil dieser Serie erfüllt.

Vorab möchte ich noch auf die Seite von Ulrich Mierendorff verweisen. Auf der Grundlage seines Scripts Amazon® AWS HMAC signed request using PHP basiert das hier angeführte Beispiel.

Zum optimalen Verständnis des Scripts werden wir dieses Schritt für Schritt durchgehen – zuerst immer der Code, anschliessend die Erklärung.

Die Grundvariablen

1
2
3
$secretAccessKey = "dein Secret Access Key";
$baseUrl = "http://ecs.amazonaws.de/onca/xml?";
$prepend = "GET\necs.amazonaws.de\n/onca/xml\n";

Die Variable $baseUrl ist, wie der Name schon vermuten lässt, die Basis für unsere Anfrage an die Amazon API. Hierzu sollte vielleicht noch einmal angemerkt werden, dass die Domain-Endung “.de” hierbei festlegt, dass unsere Abfrage an den deutschen Amazon-Store gerichtet wird.
Will man z.B. eine Anfrage an den US-Store richten, müsste hier “.com” stehen.
Übersicht Grund-URLs

Die Variable $prepend ist für die spätere Erstellung des “Signed Requests” notwendig. In Sachen Domain-Endung gilt hier dass gleiche wie für die BaseUrl.

Die Grundparameter

1
2
3
4
$params["Service"] = "AWSECommerceService";
$params["AWSAccessKeyId"] = "deine Access Key Id";
$params["Version"] = "2009-03-31";
$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");

Diese Variablen sollten selbsterklärend sein, wobei die Variable $params["Timestamp"] auch hier nur für die Erstellung des “Signed Requests” benötigt wird.

Weitere Paramater

1
2
3
$params["Operation"] = "ItemSearch";
$params["SearchIndex"] = "Books";
$params["Keywords"] = "Garten Feng Shui";

Die Variable $params["Operation"] steht hierbei für die Art der Anfrage, in diesem Fall eine Artikelsuche.
Übersicht Operationstypen

$params["SearchIndex"] legt die Kategorie fest in der gesucht werden soll.
Übersicht Kategorien

$params["Keywords"] enhält den Suchbegriff für unsere Anfrage.

Zusammengefasst legen wir hier also folgendes fest. Suche nach “Artikeln” (ItemSearch) in der Kategorie “Bücher” (Books) die den Begriff “Garten Feng Shui” (Keywords) enthalten.

Noch eine kleine Anmerkung zu den Variablen. Wie ihr seht werden einige Variablen in einem Array zusammengefasst. Dadurch können wir im folgenden Teil den strengen “Anfrageregeln” von Amazon besser gerecht werden.

Die Parameteraufbereitung

1
ksort($params);

Zuerst wird das Array mit den Anfrage-Parametern in die richtige Reihenfolge gebracht, sprich alphabetisch sortiert.

1
2
3
4
5
6
7
8
9
10
11
foreach ($params as $param => $value)
{
    $param = str_replace("%7E", "~", rawurlencode($param));
    $value = str_replace("%7E", "~", rawurlencode($value));
 
    $request[] = $param."=".$value;
}
$request = implode("&", $request);
 
// String für die Signierung erstellen
$request_to_sign = $prepend . $request;

Dann werden die Parameter nach vordefinierten Regeln aufbereitet und anschliessend zu einem zu signierenden String zusammengesetzt.

Die Signatur erstellen

1
2
3
4
5
6
$signature = base64_encode(
		  hash_hmac('sha256', $request_to_sign, $secretAccessKey, true)
		);
 
$signature = str_replace("+", "%2B", $signature);
$signature = str_replace("=", "%3D", $signature);

Der zuvor erstellte String wird nun mit “base64″ kodiert und mit “sha256″ und dem “secretAccessKey” verschlüsselt. Schliesslich bereinigen wir noch einige Sonderzeichen.

Die Abfrage

1
2
3
4
5
6
7
8
$requestString = $baseUrl . $request . "&Signature=" . $signature;
 
$response = file_get_contents($requestString);
 
$xml = simplexml_load_string($response);
 
// Ausgabe des XML-Files
print_r($xml);

Der Abfragestring wird zusammengesetzt, um die erhaltene Signatur ergänzt und im Anschluss kann auch schon unser Request durchgeführt werden.
Jetzt lassen wir uns noch das Ergebnis anzeigen. Fertig ;)

Zusammenfassung

  • Die Parameter müssen bereinigt und alphabetisch sortiert werden
  • Dann wird der String erstellt, kodiert und verschlüsselt
  • Der Request wird um die erhaltene Signatur ergänzt

Das soll es also für diese Artikelserie gewesen sein. Man könnte natürlich noch alles in eine Funktion packen um komfortabel Anfragen durchführen zu können. Das hebe ich mir aber für einen eigenen Artikel auf.

Das komplette Skript kannst du natürlich auch downloaden.
Amazon API signierte Abfrage

Bisherige Artikel dieser Serie

Amazons API – Teil 1 (Grundlagen)
Amazons API – Teil 2 (Der erste Request)
Amazons API – Teil 3 (Abfrage mit PHP)

Share

1 Antwort : “Amazons API – Teil 3 (Abfrage mit PHP)”

Einen Kommentar schreiben

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

*


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">