Kategorien
Webdesign

Workshop Webservices: Amazon Webservices

Auch Amazon stellt Webservices für das deutsche Angebot zur Verfügung. Über diese Webservices können komplette und komfortable Partner Shops erstellt werden. Diese können auf einfache Art mit PHP und XSL in die eigenen Seiten integriert werden. Bevor man mit…

Auch Amazon stellt Webservices für das deutsche Angebot zur Verfügung. Über diese Webservices können komplette und komfortable Partner Shops erstellt werden. Diese können auf einfache Art mit PHP und XSL in die eigenen Seiten integriert werden.

Bevor man mit der Entwicklung von Amazon Webservices starten kann, sind eine Anmeldung und eine Entwicklerkennung nötig. Über diese versucht Amazon festzustellen, wer Webservices verwendet. Zudem kann auf der Amazon Website auch ein Developer-Kit für Webserviceentwickler herunter geladen werden.

Amazon bietet seine Webservices erst seit Ende 2003 auch für deutsche Entwickler an. Über diese Webservices können Websitebetreiber Inhalte und Features von Amazon in ihre eigene Seite integrieren.

Die Strategie lohnt sich nicht nur für Amazon, sondern auch für den Websitebetreiber. Durch die von ihm aus vermittelten Verkäufe erhält er eine Partnerprovision über das „normale“ Amazon Partnerprogramm. Aufgrund dessen sind die Nutzerzahlen von Amazon Webservices bereits stark gestiegen. Bereits ein Jahr nachdem die Webservices in den USA eingeführt wurden, gab es fast 30.000 Entwickler, die Webservices in ihre Anwendungen integrierten.

Nachdem man den so genannten Developer-Token, die Entwicklerkennung erhalten hat, kann man sich an die Nutzung der Webservices machen. Bei der hier verwendeten Technik werden Anfragen an das Amazon System über die URL gesendet; beantwortet werden die Anfragen an das System über XML. In der Fachsprache wird das eine REST-, im Gegensatz zu einer SOAP-Kommunikation genannt. Man benötigt keine SOAP Schnittstelle, sondern kann die Anfragen direkt über die URL senden. Jedoch ist die REST-Kommunikation nicht standardisiert und bringt auch Nachteile mit sich. Für die Einführung in Amazon Webservices sollte sie jedoch genügen.

Die folgende URL stellt eine allgemeine Anfrage an das Amazon System dar. Auf diese Art sind alle Anfragen über REST aufgebaut:

 http://xml-eu.amazon.com/onca/xml3?t=[Ihre Werber Kennung]&dev-t=[Ihr
    DeveloperToken]&[Suchart]=[Suchwort]&mode=
    [Produkt]&sort=[Sortierart]&offer=All&type=[Antworttyp]
    &page=[Seitennummer]&f=[Format]&locale=[Länderkennung]

Wie man sieht gibt es zahlreiche Parameter mit deren Hilfe die Amazon Produkte abgefragt werden. Haben Sie bereits ihren Developer-Token und ihre Werber Kennung können Sie zum Beispiel folgende Anfrage an Amazon senden (passen Sie die Adresse einfach an, und rufen Sie sie im Browser auf)

      http://xml-eu.amazon.com/onca/xml3?t=[Ihre Werber Kennung]&dev-t=[Ihr
    Developer Token]&KeywordSearch=php html&mode=de_books&sort=+pmrank&offer=All&type=
    lite&page=1&f=xml&locale=de

Screenshot

XML Antwort auf REST Anfrage im Ausschnitt

In der folgenden Liste sehen Sie mögliche Parameterwerte. Die ausführliche Liste finden Sie in dem bei Amazon herunterladbaren Developer-Kit.

[Suchart]

  • AsinSearch
    Suche nach Amazon Produkten über die ASIN Nummern; das sind die amazoninternen Nummern, über die die Produkte eindeutig gekennzeichnet sind.
  • AuthorSearch
    Sucht nach einem Autor und den von ihm veröffentlichten Produkten.
  • BrowseNodeSearch
    Die Suche nach einer Produktkategorie – diese Kategorien sind durch eindeutige Browsenodes gekennzeichnet. Die Browsenodes der jeweiligen Kategorien können sie über einen Besuch bei Amazon.de ermitteln. Für die Kategorie „PHP“ ist die Browsenode http://www.amazon.de/exec/obidos/tg/browse/-/1201356/.
  • KeywordSearch
    Suche nach bestimmten Produkten über Schlüsselwörter.

Es gibt noch weitere Sucharten. Hier die vier wichtigsten:

[Suchwort] Das Suchwort hängt von der gewählten Suchart ab. Bei einer AsinSearch ist das Suchwort eine ASIN Nummer, bei einer AuthorSearch eben der Name des Autors.

[Produkt]
Da Amazon nicht nur Bücher verkauft, kann hier angegeben werden, nach welchen Produkten der Amazon Produktpalette gesucht werden soll.

Produkt Produktkennung für Amazon Deutschland
Bücher books-de
Pop-Musik pop-music-de
Klassische Musik classical-de
DVD dvd-de
Video vhs-de
Software software-de
Computer-/Videospiele video-games-de
Zeitschriften magazines-de

[Sortierart]
Die Ergebnisse einer Anfrage können nach verschiedenen Mustern sortiert werden. Auch hier werden nur die wichtigsten Sortierarten vorgestellt; die Sortierarten können von Produkt- zu Produkt auch variieren. Die hier vorgestellten Sortierverfahren sind diejenigen, die bei allen Produkten anwendbar sind.

  • +pmrank
    Dabei werden die Produkte nach der von Amazon bevorzugten Reihenfolge aufgelistet.
  • +salesrank
    Die Produkte werden nach ihrem amazoninternen Verkaufsrang aufgelistet. Das meistverkaufte Produkt der Ergebnisliste steht an erster Stelle.
  • +reviewrank
    Die Produkte werden nach den Bewertungen der Käufer aufgelistet.
  • +price
    Die Produkte werden nach ihrem Preis sortiert; das günstigste erscheint an erster Stelle.

[Antworttyp]
Mit dem Antworttyp wird der Umfang der Antwort bestimmt. Es gibt zwei mögliche Parameter; zum einen „lite“, zum anderen „heavy“.

Bei dem „lite“ Parameter werden lediglich allgemeine Informationen über die Produkte übermittelt. Darunter sind die:

  • URL zum Produkt
  • ASIN
  • Produktname (Titel)
  • Kategorie
  • Autor
  • Veröffentlichungsdatum
  • Hersteller (Verlag)
  • Adressen zu verschiedenen Bildern
  • Verfügbarkeit
  • Preis

Wird dagegen „heavy“ angegeben, erhält der Entwickler nicht nur die oben genannten Daten übermittelt, sondern komplette Produktbeschreibungen sowie die Referenzen von Käufern. So ist wird es möglich, den kompletten Content in die eigenen Seiten einzubinden.

[Seitennummer]
Pro Anfrage werden nur zehn Ergebnisse zurückgegeben. Findet Amazon jedoch zu der Anfrage mehr als nur 10 Produkte, werden diese auf mehrere Ergebnisseiten verteilt.

Gibt man nun als Seitennummer anstatt 1, zum Beispiel 5 an, werden als Ergebnis die Produkte zurückgegeben, die sich als Ergebnisse der Anfrage auf Ergebnisseite 5 befinden.
Zudem wird bei jeder Anfrage an Amazon die Anzahl der gefundenen Produkte, sowie die Anzahl der Ergebnisseiten übermittelt. Auf diese Weise kann man später eine Navigation durch die Ergebnisseiten erstellen.

[Format]
Über diesen Parameter wird das Format der Antwort von Amazon bestimmt. Standardmäßig ist dies das XML-Format. Man kann jedoch auch eine Transformierung der XML-Daten über ein eigenes XSLT-Stylesheet vornehmen. Im Ergebnis erhält man dann „reinen“ HTML-Code.

[Länderkennung]
Die Länderkennung gibt an, auf welches Amazon zugegriffen wird. Ist die Länderkennung „de“, wird auf das deutsche Amazon zugegriffen. Bisher gibt es nur wenige Länder in denen Amazon Webservices angeboten werden – ein Ausbau soll aber, laut Amazon, bald erfolgen.

Nachdem die einzelnen Parameter genauer spezifiziert sind, können wir uns an die Entwicklung eines einfachen Amazon Webservices machen. Dabei soll eine einfache Anfrage über Keywords an Amazon.de gerichtet werden. Diese soll von Amazon beantwortet und direkt über ein XSL-Stylesheet transformiert werden. Das Resultat sollte einfacher HTML Code sein.

Nehmen wir das Beispiel von oben:

      http://xml-eu.amazon.com/onca/xml3?t=[Ihre Werber Kennung]&dev-t=[Ihr
    Developer Token]&KeywordSearch=php html&mode=de_books&sort=+pmrank&offer=All&type=
    lite&page=1&f=xml&locale=de

Dabei wird nach Büchern über die Stichworte „php html“ gesucht. Die Antwort als XML-Daten können, wie bereits gesagt, auch direkt von Amazon über ein XSL-Stylesheet zu HTML transformiert werden. Hierzu muss der Format-Parameter bei der HTTP-Anfrage angepasst werden; dieser muss auf das XSL-Stylesheet verweisen, dass auf ihrem Server abgelegt ist.

Zunächst soll jedoch ein XSL-Stylesheet entwickelt werden. Betrachtet man sich die XML Rückgabe von Amazon erkennt man, dass der Wurzelknoten des Dokumentes <ProductInfo> ist. Zudem finden sich in der Antwort von Amazon auch die Request-Informationen, also die Anfrage die an Amazon gestellt wurden. Es werden pro Anfrage auf einer Seite maximal zehn Produkte angegeben.

Da die Anfrage den Antworttyp „lite“ verwendet, sind die Antwortdaten nicht sonderlich umfangreich. Alle Daten über ein Produkt sind in den jeweiligen <Details> Knoten gespeichert. Auf diese soll nun über das XSL-Stylesheet zugegriffen werden.

amazon_ws_1.xsl

      <?xml version="1.0" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/TR/xhtml1/strict">
    <xsl:template match="/">
    <table border="1">
    <tr><td>ASIN</td>
    <td>URL</td>
    <td>Name</td></tr>
    <xsl:for-each select="ProductInfo/Details">
      <tr>
    <td><xsl:value-of select="Asin"/></td>
    <td><xsl:value-of select="@url"/></td>
    <td><xsl:value-ofselect="ProductName"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </xsl:template>
    </xsl:stylesheet>

Wie man im XSL-Stylesheet gut erkennen kann, werden lediglich die drei Elemente ProductName, die ASIN und die Adresse unter welcher man das Buch bei Amazon bestellen kann, ausgegeben. Dies geschieht über eine for-each Anweisung; das heißt die Daten werden zu allen zehn Büchern der Ergebnisliste ausgegeben.

Lädt man dieses Stylesheet auf den Server und ändert seine Anfrage an Amazon wie folgt ab, dann erhält man eine mehr oder minder schön formatierte HTML-Ausgabe ohne XML.

      http://xml-eu.amazon.com/onca/xml3?t=[Ihre Werber Kennung]&dev-t=[Ihr
    Developer Token]&KeywordSearch=php html&mode=de_books&sort=+pmrank&offer=All&type=
    lite&page=1&f=http://www.deineseite.de/amazon.xsl&locale=de

Das heißt die ganze „Arbeit“ des Auslesens und Formatierens kann über XSL-Stylesheets durch Amazon gemacht werden lassen. Das ist natürlich sehr komfortabel.

Screenshot

So könnte das Ergebnis der XSL Transformation aussehen

Nun soll die Anfrage an den Amazon Webservice über ein PHP-Skript gesendet werden und die Antwort von diesem aufgefangen und ausgegeben werden. Das PHP Programm besteht aus nur wenigen Zeilen:

amazon.php

      <?php 
      $request = "http://xml-eu.amazon.com/onca/xml3?t=[Ihre Werber
    Kennung]&dev-t=[Ihr Developer Token]&KeywordSearch=php html&mode=de_books&sort=+pmrank&offer=All&type=
    lite&page=1&f=http://www.deineseite.de/amazon.xsl&locale=de;
      if (!$data = readfile($request)) {
    echo "Ein Fehler ist aufgetreten!";
    }
    else {
    echo $data;
    }
    ?> 

Dabei wird ein Trick angewendet – die Anfrage erfolgt über einen Dateiaufruf. Es wird die Anfrageadresse über die PHP-Dateifunktion readfile() geöffnet und eingelesen. Am Resultat ändert sich nichts, dennoch hat man so eine Schnittstelle zwischen PHP und Amazon Webservices auf Basis der REST Kommunikation geschaffen.

Die Nutzung der Amazon Webservices wird durch die Anwendung von XSL-Stylesheets um einiges flexibler – auch der Programmieraufwand wird stark verringert. Möchten Sie etwa einen kleinen Büchershop zu einem bestimmten Thema erstellen, so können Sie diverse XSL-Stylesheets für die verschiedenen Produktdarstellungen anwenden. Sie finden bei Amazon bereits ein solches XSL-Stylesheet, mit dem die verschiedensten Suchtypen angewendet werden können und über XSL formatiert ausgegeben werden.

Eigene Anwendungen
Die erste kleine Anwendung ist eine simple Zufallsausgabe von Büchern. So sollen beim Besuch einer Seite jeweils möglichst verschiedene Bücher automatisch vorgestellt werden. Hierzu wird auf die bereits im vorherigen Teil vorgestellte Technik zurückgegriffen. Dabei werden in einem Array verschiedene ASIN Nummern hinterlegt; durch eine Zufallszahl wird eine dieser ASIN Nummern ausgewählt, über den URL aufgerufen und durch ein XSL-Stylesheet formatiert und ausgegeben.

      <?php
$asin = array(0 => "3827262909",
1 => "3540413715",
2 => "3446227350",
3 => "3898424901"
);
$bid=mt_rand(0,count($asin)-1);
      $request = "http://xml-eu.amazon.com/onca/xml3?
t=[Ihre Werber Kennung]&dev-t=[Ihr DeveloperToken]&AsinSearch=".$asin[$bid]."
&mode=books&offer=All&type=lite&page=&f=
http://www.ihredomain.de/style.xsl&locale=de";
      if
($data = readfile($request)) {
echo $data;
}
else {
echo "Timeout";
}
?>

Wie sie im Skript sehen, kann es auch ab und an zu Timeouts kommen. Das ist insbesondere dann der Fall, wenn Amazon Webservices beziehungsweise der XSL-Prozessor auf den Amazon Servern stark ausgelastet sind. Des Weiteren hat Amazon eine „eine Sekunden“ Regel eingeführt, um die Serverauslastung zu minimieren. Demnach dürfen nur maximal eine Anfrage pro Sekunde an die Amazon Webservices gesendet werden. Bei starker Auslastung sollte man die Suchergebnisse cachen.

Das XSL-Stylesheet für das Beispiel könnte wie folgt aussehen:

      <?xml
version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:apply-templates select="ProductInfo/Details"/>
</xsl:template>
<xsl:template match="Details">
<div style="float:left; width: 400px; padding:3px; border: 1 dotted #000000;
margin:5px; background:#F5F5F5;">
<a href="{@url}" target="_blank"><image src="{ImageUrlMedium}"

alt="{ProductName}" align="left"/></a>
<b><xsl:value-of select="ProductName"/></b><br/><br/>
Preis: <xsl:value-of
select="OurPrice"/><br/><br/>
<i><a href="{@url}" target="_blank">Jetzt bei
Amazon.de kaufen!</a></i></div>
</xsl:template>
</xsl:stylesheet>


Das mögliche Ergebnis

Das obige Beispiel könnte man noch weiter umwandeln. So liessen sich etwas Bücher nach verschiedenen Themenbereichen ausgeben, um damit die Verkaufsrate zu steigern.

Ein eigener Amazon Shop
Hier gibt es bereits jede Menge kommerzielle Software, da das Potenzial für die Generierung von Umsätzen groß ist. Man findet komplette auf Amazon basierende Webshops die Umsätze im fünfstelligen Bereich generiert haben. Das lohnt sich für Amazon, aber auch für den Betreiber des Partnershops.

Für Webseitenbetreiber, die zu einem bestimmten Thema Inhalte liefern, kann sich das „anbieten“ von zum Thema passenden Büchern über einen Amazon Partnershop lohnen. Das haben sich auch bereits viele Software-Entwickler gesagt; diese stellen ihren Kunden Software für den Aufbau eines eigenen Amazon Partnershops zur Verfügung und lassen sich das auch entgelten.

Bei Associatesshop können Sie ihren eigenen Onlineshop auf Basis der Amazon Webservices erstellen. Dabei wird dieser Shop von Associateshop gehostet; sie müssen also keine Arbeit bei der Entwicklung des Shops verrichten. Die Sache hat jedoch einen Haken – für 80% der Produktpalette von Amazon wird ihre Partner-ID vom Amazon Partnerprogramm eingetragen, für die restlichen 20% der Produkte wird die Partner-ID von Associateshop eingetragen – so finanziert sich dieser Service.

Es gibt seit einiger Zeit auch kostenlose Funktionsbibliotheken, mit denen Sie sich Ihren Amazon Partnershop relativ schnell gestalten können – hierbei ist insbesondere die kostenlose AmazonLib vorzustellen, welche als Sourceforge Projekt herunter geladen werden kann.

Diese Bibliothek enthält sowohl Funktionen für die Nutzung von Amazon Webservices über REST- als auch SOAP-Kommunikation. Dabei werden die zurückgegebenen Daten in assoziative Arrays überführt – diese haben im Großen und Ganzen die gleiche Form.

Die folgende kleine Anwendung soll zeigen, in wie weit Sie einen einfachen Amazon-Shop mit Hilfe dieser Funktionsbibliothek aufbauen können.

Nehmen wir an unsere Webseite beschäftigt sich mit Themen wie Webdesign, HTML, CSS und so weiter. Unser kleiner Partnershop soll es möglich machen, auf die Amazon Angebote zu diesem Thema zuzugreifen respektive nach bestimmten Büchern zu suchen.

Zunächst müssen wir die Browsenodes der verschiedenen Themenbereiche ermitteln; über diese möchten wir später unser Menü gestalten.

Bereich Browsenode
Webdesign 1201364
HTML 1201246
Usability 1201380

Für unsere Anwendung benötigen wir eine Funktion, mit der der Besucher durch die BrowseNodes nach Bücher stöbern kann. Zudem benötigen wir eine Suchfunktion und eine Funktion über die die detaillierte Produktbeschreibung angezeigt werden kann.
Durch die AmazonLib wird das Senden und Empfangen von Daten kinderleicht.

Eine Suche nach einem Keyword kann über folgende Zeile Code durchgeführt werden:

      $Results = $AS->AmazonSearch(KEYWORD, $keyword, $Type,
'books', 1);

Wobei $AS ein Objekt ist, $keyword das Suchwort, nachdem gesucht wird, $Type die Rückgabeform (heavy oder lite) und die ‚1‘ am Ende die ausgewählte Suchergebnisseite.

Die einzige Schwierigkeit bei der Erstellung unseres kleinen Shops besteht darin, dass wir die Form der zurückgegebenen Arrays ermitteln müssen und dann die passenden Daten ausgeben.
Zunächst muss jedoch das Objekt erzeugt werden:

      //einbinden
des REST Parsers
require_once("amazonrest.php");
//die Werber-ID
$Tag = '[Ihre WerberID]';
$Token = '[Entwicklerkennung]';
//Rückgabetyp
$Type = 'heavy';
//Länderkennung
$Locale='de';
$Debug = false;
      //erzeugen des Objekts
$AS = new AmazonREST($Token, $Tag, $Locale, $Debug);

Ein kleines Menü für die drei verschiedenen Browsenodes könnte man mit folgenden Zeilen erstellen:

      $nodes = array ('Webdesign' => '1201364',
'HTML' => '1201246',
'Usability' => '1201380');
foreach ($nodes as $key=>$elem) {
print '<a href=amazon_shop.php?node='.$elem.' title='.$key.'>'.$key.'</a><br>';
}

Klickt nun ein Besucher auf einen so generierten Link, sollten die Bücher in der jeweiligen Kategorie aufgelistet werden.
Das könnte mit folgendem Codeschnipsel erledigt werden:

      if(isset($_GET['node']))
{
$Results = $AS->AmazonSearch(BROWSENODE, $_GET['node'], $Type, 'books', 1);
for ($i=0;$i<count($Results);$i++) {
print '<p>';
print '<img src='.$Results[$i]['ImageUrlMedium'].'
alt='.$Results[$i]['ProductName'].' align=left><br><a href=?asin='.$Results[$i]['Asin'].'>'.
$Results[$i]['ProductName'].'</a>';
print $Results[$i]['Reviews']['CustomerReview']
[0]['Summary'].'<br><br>';
print 'für nur '.$Results[$i]['OurPrice'].'</p>';
print '<small><a href=?asin='.$Results[$i]['Asin'].'>Weitere Informationen</a></small><br>';
print '<a href= '.$Results[$i]['url'].'>Bestellen!</a>';
}

Das schwierigste an einer solchen Anwendung ist zu entscheiden, welche Teile der Produktbeschreibung angezeigt werden sollen, und welche nicht – über die PHP Funktion var_dump() können Sie die Struktur des zurückgegebenen Arrays leicht ermitteln und dann auf diese zugreifen.

Genauso kann man auch mit der ASIN Suche vorgehen. Die ASIN wird wie in den Zeilen oben angedeutet als Parameter in dem URL übergeben. Über $_GET[‚asin‘] kann man ermitteln ob eine ASIN vorhanden ist, und dann die Daten zu dem Produkt ausgeben.

Alles in allem wird die Nutzung von den mitunter sehr komplexen Amazon Webservices anhand der AmazonLib oder anderen Funktionsbibliotheken erheblich erleichtert.

Von Thiemo Fetzer

Thiemo Fetzer lebt seit 2008 in London und promoviert dort im Fachbereich "Entwicklungsökonomie" an der London School of Economics. Zuvor hat er Wirtschaftswissenschaften, Mathematik und Informatik in Magdeburg und Ulm studiert.

Schreibe einen Kommentar

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