Das Partnerprogramm von Amazon ist sehr beliebt. Mit wenig Aufwand lassen sich alle Produkte als Partnerlink auf der eigenen Webseite einbinden. Der Wartungsaufwand steigt allerdings proportional mit der Menge der verlinkten Artikel. Eine Vereinfachung bietet die Amazon API – auch wenn es erstmal kompliziert erscheint.
Die Amazon API bietet viele Möglichkeiten. Von der Anzeige kompletter Suchergebnisse zu einem Keyword auf der eigenen Webseite, bis hin zu funktionierenden Warenkörben. Die API erlaubt den Zugriff auf (fast) alle Angaben, die Amazon zu einem Artikel anbietet.
Ehe die Amazon-API verwendet wird, sollte aber ein klares Ziel vor Augen sein, was man eigentlich machen möchte. Das Ziel dieses kleinen Projektes ist es, eine bestimmte Menge ausgewählter Produkte für die eigene Webseite zu verwalten und anzubieten. Mit einer Sortierfunktion sollen diese Artikel nach bestimmten Kriterien sortiert werden können. Um das für den laufenden Betrieb der Webseite zu automatisieren geht es allerdings nicht ohne etwas Vorarbeit.
Amazon beschränkt die Anzahl der Zugriffe auf die API. Je mehr Besucher also auf der Webseite unterwegs sind, desto mehr Zugriffe müssen natürlich auf die API erfolgen.
Zuletzt aktualisiert am 12. September 2022 um 01:02 . Wir weisen darauf hin, dass sich hier angezeigte Preise inzwischen geändert haben können. Alle Angaben ohne Gewähr.
Für gut besuchte Webseiten ist es macht es also Sinn, die Daten aus der Amazon API auszulesen und selbst vorzuhalten. Die zwischengespeicherten Daten dürfen aber maximal 24 Stunden lang vorgehalten werden.
Das ist natürlich auch deshalb sinnvoll, damit auf der eigenen Seite keine veralteten Preise angezeigt werden.
Ziel ist also nicht nur ein kleines Produktsortiment für die Nischenseite, sondern die Daten davon auch per Cronjob in einem gewissen Zeitintervall aktualisieren zu lassen. So, genug der Laberei – dann mal los!
Inhaltsverzeichnis
Was ist eigentlich eine API?
Die Abkürzung API steht für Application Programming Interface. Frei Schnauze übersetzt beschreibt es also eine Schnittstelle zur Anwendungsprogrammierung um die Daten aus fremden Quellen für eigene Anwendungen zu nutzen. APIs gibt es von vielen großen Anbietern wie eBay, Google, Twitter, YouTube, PayPal…
Um Daten von einer API geliefert zu bekommen, müssen diese logischerweise erstmal angefragt werden. Das funktioniert mit verschiedenen Techniken, meist wird die Antwort im XML-Format zurückgeliefert.
Damit das Rad nicht ständig neu erfunden werden muss, stellen die Anbieter der API schon vorgefertigte Bibliotheken bereit, um die ersten Schritte und damit auch die Zugriffe zu erleichtern. Diese Hilfsmittel stellt natürlich auch Amazon zur Verfügung, derer wir uns natürlich bedienen.
Nun liefert die API aber nicht Hinz und Kunz einfach mal ein paar Daten aus. Um die API nutzen zu können, muss man, logisch, für das Amazon Partnerprogramm registriert sein. Doch auch das alleine genügt noch nicht. Damit überhaupt Daten geliefert werden können, vergibt Amazon an jeden Nutzer zwei Schlüssel. Ein Schlüssel ist öffentlich, einer privat. Der private Schlüssel sollte also nicht irgendwo rausgegeben werden. Der öffentliche Schlüssel hat aber auch in keiner Öffentlichkeit etwas zu suchen.
Für die API ist im Bereich „Werbekostenerstattung“ im linken Menü ein Punkt „Amazon Product Advertising API“. Unter diesem Menüpunkt befindet sich die Anmeldung für die API, dort lassen sich auch unter Dokumentation -> Account die beiden Schlüssel für die Abfragen erstellen.
Unübersichtlich und verwirrend
Als Einsteiger im Thema bietet sich natürlich die Dokumentation von Amazon an. Diese ist aber ziemlich verwirrend strukturiert und dazu nur in Englisch verfügbar. Auf der Suche nach einer leichten und einfachen Lösung um die Amazon-API ohne jeden Tinneff einzubinden, landet man irgendwann auf dieser Webseite. In unserem Fall benötigen wir den Download der PHP Function 2.0. Die im Archiv enthaltene Datei aws_signed_request.php muss dann in das Projektverzeichnis entpackt werden.
Diese Datei wird in unser gleich folgendes PHP-Skript eingebunden. Dieses Skript findet sich als Quellcode etwas weiter unten auf der eben verlinkten Seite.
Am Ende der Seite finden sich einige Kommentare, die bei möglicherweise auftretenden Problemen helfen können.
Werkzeuge: ASIN, Excel, PHP und MySQL
Alle wichtigen Infos zum Artikel holen wir uns also durch direkte Anfragen von der Amazon API. Um aber diese Informationen finden zu können, benötigt man die ASIN des Artikels. Die ASIN ist ein Code, den Amazon für jeden im Sortiment erhältlichen Artikel vergibt. Ähnlich wie eine ISBN oder EAN-Nummer.
Bei unseren ausgewählten Produkten handelt es sich auch sprichwörtliche um solche. Wir stöbern also durch das Angebot von Amazon und speichern die ASIN von den benötigten Artikeln in einer Excel-Tabelle. Bei der Gelegenheit können auch weitere Attribute des Artikels (Farben/Formen/Größen) in weitere Spalten der Tabelle eintragen werden. Das kann durchaus sinnvoll sein, denn nicht bei allen Artikeln liefert die Amazon immer alle Daten mit. Das ist aber nur wichtig, wenn man selber eine Möglichkeit benötigt die Artikel zu sortieren.
Angaben zu Artikelname, Bilder, Link zum Artikel und den Preis liefert uns später die API.
Zunächst muss aber in der eigenen MySQL-Datenbank eine neue Tabelle erstellt werden, in der die gleichen Spalten wie in der Excel-Liste vorhanden sind. Diese Tabelle muss natürlich zusätzlich zu den Angaben aus unserer Excel-Datei auch noch Spalten für die Daten haben, die von Amazon geliefert werden.
Es muss also beachtet werden, dass die Tabelle in der Datenbank im Aufbau identisch mit der Excel-Tabelle ist.
Ist das getan, muss die Excel-Liste mit den Artikeln als CSV exportiert werden (Datei -> Speichern unter -> Als CSV Trennzeichen getrennt). Diese Datei kann nun ganz einfach über Importfunktion von phpMyAdmin in die soeben erstellte Datenbanktabelle importiert werden.
Die richtige Antwort fordern: Amazon Response Groups
Leider kann man nicht einfach die ASIN an Amazon senden und hoffen alle relevanten Infos zum Artikel zu erhalten. Amazon hat ein extrem umfangreiches Sortiment und nicht alle Angaben sind für alle Produkte nötig. CDs haben andere Angaben als Bohrmaschinen, Computerspiele wieder andere als Stehlampen.
Um den Datenverkehr in Grenzen zu halten, lassen sich spezielle „Response Groups“ abfragen, die mehr oder weniger unterschiedliche Ergebnisse liefern.
Bei den verschiedenen Response Groups gibt es auch noch Untergruppen. Diese Untergruppen sind fest in der jeweiligen Response Group verankert und werden immer automatisch mitgeliefert. Dazu gehören zum Beispiel die Artikelbilder. Man muss also für die Artikelbilder keine weiteren Request an die API senden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php include ("../inc/config.php"); //Datenbankverbindung herstellen //Amazon-Keys und Affiliate-ID define('AWS_API_KEY', 'DEIN_API_KEY'); define('AWS_API_SECRET_KEY', 'DEIN_SECRET_API_KEY'); define('AWS_ASSOCIATE_TAG', 'deine-amazon-id-21'); include('aws_signed_request.php'); //Datei inkludieren $sql = "select * from artikel"; //SQL-Abfrage beginnen $result = mysqli_query($db,$sql); while ($zeile = mysqli_fetch_array($result)) { $asin = $zeile[asin]; // generate signed URL $request = aws_signed_request('de', array( 'Operation' => 'ItemLookup', 'ItemId' => $asin, 'ResponseGroup' => 'Large'), AWS_API_KEY, AWS_API_SECRET_KEY, AWS_ASSOCIATE_TAG); // do request (you could also use curl etc.) $response = @file_get_contents($request); if ($response === FALSE) { echo "Request failed.\n"; } else { // parse XML $pxml = simplexml_load_string($response); if ($pxml === FALSE) { echo "Response could not be parsed.\n"; } else { $titel = $pxml->Items->Item->ItemAttributes->Title; } } }; |
Dieser Code speichert die drei Angaben für Amazon in Konstanten. Dort müssen natürlich die von Amazon erhaltenen Schlüssel und die Tracking-ID eingetragen werden.
Danach wird die aws_signed_request.php inkludiert, die mit diesen Angaben gleich den Aufruf bei der Amazon-API vollbringt.
Aus unserer Datenbanktabelle Artikel lesen wir mit „SELECT * from Artikel“ alle Zeilen aus, die durch die darauf folgende While-Schleife nun Zeile für Zeile abgearbeitet wird.
Als Response-Group ist hier „Large“ gewählt. Das muss aber nicht die beste Einstellung sein. Danach wird ausgewertet, ob die Abfrage erfolgreich war. War sie es, werden alle empfangenen Daten in dem Array $pxml gespeichert, dem Sie im nächsten Schritt wieder entnommen werden können. Dies geschieht hier beispielhaft mit der Variable $titel.
Den Strukturbaum durchblicken
War die Anfrage an die Amazon-API von Erfolg gekrönt, befindet sich die Antwort im Array $pxml. Um diese nun aus dem Array heraus nutzen zu können, muss man sich die Position erstmal heraus suchen. Da die Antwort im Prinzip aus einer XML-Datei besteht, kann man sich natürlich da durch wühlen.
Alternativ lassen sich die Positionen aber auch in der Amazon-Dokumentation rausfinden. Dazu muss in der Liste der möglichen Response Groups die verwendete (hier Large) ausgewählt und dann das betreffende Element angeklickt werden. Am unteren Rand der Seite befindet sich ein XML-Beispielcode, der den Aufbau und damit quasi die Pfade zum auserwählten Element darstellt.
Das obige Beispiel wird ab $titel mit folgenden Anweisungen ergänzt:
1 2 3 4 5 6 7 8 9 10 |
$titel = $pxml->Items->Item->ItemAttributes->Title; $preis = $pxml->Items->Item->OfferSummary->LowestNewPrice->FormattedPrice; $smallimage = $pxml->Items->Item->SmallImage->URL; $mediumimage = $pxml->Items->Item->MediumImage->URL; $largeimage = $pxml->Items->Item->LargeImage->URL; $link = $pxml ->Items->Item->DetailPageURL; $feature1 = $pxml ->Items->Item->ItemAttributes->Feature[0]; $feature2 = $feature . $pxml ->Items->Item->ItemAttributes->Feature[1]; $feature3 = $feature . $pxml ->Items->Item->ItemAttributes->Feature[2]; $feature4 = $feature . $pxml ->Items->Item->ItemAttributes->Feature[3]; |
Damit sind alle benötigten Artikel in entsprechenden Variablen abgelegt. Das ist ein kleiner Umweg, dient aber der Übersicht.
Ab in die Datenbank
Ist die Datenbanktabelle einsatzbereit, müssen die noch leeren Felder jetzt mit den Daten aus der Amazon API gefüllt werden.
Die while-Schleife sorgt dafür, dass auch wirklich jede ASIN aus der Datenbank an Amazon gesendet wird und die passenden Daten geliefert werden.
Dummerweise läuft die Schleife bisher jetzt nur durch, speichert aber die gelieferten Daten noch nicht in der Datenbank ab. Um das zu bewerkstelligen, wird der Update-Befehl von MySQL verwendet, denn der Datensatz besteht ja schon und soll nicht erneut angelegt werden.
Vor der schließenden, geschweiften Klammer der while-Schleife wird nun das Update des Datensatzes in der Datenbanktabelle durchgeführt.
1 2 |
$insert = "update artikel set name = '$titel', preis = '$preis', link = '$link', feature1 = '$feature1', feature2 = '$feature2', feature3 = '$feature3', feature4 = '$feature4', smallimage = '$smallimage', mediumimage = '$mediumimage', largeimage = '$largeimage' where asin = '$asin'"; mysqli_query($db,$insert); |
Mit den so erstellten Daten lassen sich die Produkte von Amazon in neuem Gewand auf der eigenen Webseite darstellen.
Aktualisieren per Cronjob
Webhosting-Anbieter wie All-Inkl bieten in Ihren Paketen die Option an, Cronjobs einzurichten. Ein Cronjob ist eine Aktion, die in regelmäßigen oder zu bestimmten Zeitabständen durchgeführt werden soll. Ideal also, um unsere Produktdaten von Amazon aktuell zu halten. Normalerweile genügt eine tägliche Aktualisierung dafür.
Das Problem mit der Produktbeschreibung
Auch wenn allerhand Daten aus der Amazon-API gezogen werden können, scheint es leider keine Möglichkeit zu geben auch die Produktbeschreibung auszulesen. Lediglich bei Büchern ist es möglich, den Klappentext zu bekommen.
Wer hier eine Lösung parat hat, wie die Beschreibung doch ausgelesen werden kann – ich freue mich über eine Rückmeldung.
Pingback:Amazon API für Nischenseiten anzapfen | SE...
Pingback:Nischenseiten-Challenge Woche #03 - Alles im Plan
Pingback:Nischenseiten-Challenge Woche #01 - es geht voran
Danke für das Tutorial, hat mir am Anfang sehr geholfen :)
War jedoch dann verunsichert, wie hoch die Kosten seitens Amazon für diesen Service sind? Aber offenbar ist die API wirklich kostenlos ( siehe https://aawp.de/blog/kosten-fuer-die-nutzung-der-amazon-product-advertising-api/ ), was sehr geil ist!
Schön, wenn es hilft.
Die API ist kostenlos, ja.
Hallo Steffen,
auch ich sage zuerst danke für dieses sehr gute Tutorial. Ich bin zwar erst nach dem Download der aws_signed_request.php auf diesen Beitrag gestoßen, aber er hat mir wertvolle Tipps und Anregungen für meine Umsetzung in einem WordPressblog gegeben.
Ich arbeite schon länger mit diversen Tools unter WordPress. Beim Vergleich deiner Lösung mit bestehenden Links auf meinem Blog zu Amazon-Produkten habe ich festgestellt, das die Features gleich der Beschreibung sind. Um wirklich alle Features in die Beschreibung zu bekommen, arbeite ich basierend auf deiner Lösung mit folgender Schleife:
for($i=0; $i Items->Item->ItemAttributes->Feature->Count(); $i++)
{
echo „“.$pxml->Items->Item->ItemAttributes->Feature[$i].““;
}
Ich zähle also zuerst die gesammten Features und gebe sie dann der Reihe nach aus. Ich hoffe ich konnte weiterhelfen.
Beste Grüße aus Plankschd
Michael
Super, vielen Dank für dein Feedback.
Bei mir fehlte das „<" für die vollständige for-Schleife. Kann natürlich auch am Parser der Seite liegen….
MfG
Hi
Wie schaut es mit den Preisen aus, wenn die sich innerhalb der gespeicherten 24h ändern? Darf man dann sozusagen falsche Preise anzeigen?
LG
Ich nehme deinen merkwürdigen Namen ausnahmsweise mal hin. Beim nächsten Mal greifen die Kommentarrichtlininen.
Wenn 24 Stunden nicht reichen, kann man auch den CronJob auf ein anderes Zeitintervall stellen.
Moin Moin !
Interessanter Beitrag ! und danke dafür !
Ich habe vor ca. einem halben Jahr schon einmal versucht Amazon Artikel passend zu meinen Beiträgen in meine Seite zu Fummeln !
Aber leider hatte ich mehr Probleme als alles andere….
Die Verunsicherung von Andreas verstehe ich voll und ganz …. kann mich noch daran erinnern das ich vor einem halben Jahr auch Angst hatte…..
Denn bei der Anmeldung wir nach einer Kreditkarte gefragt …..
Damals hatte ich alles 2 Wochen getestet aber dann meine Api wieder abgemeldet….
Jetzt bin ich doch wieder am Überlegen ob ich es nicht doch noch hin bekomme …..
Jetzt möchte ich wieder Zugriff auf die Api haben und schon wieder werde ich nach eine Kreditkarte gefragt und darüber steht:
„Bitte geben Sie Ihre Zahlungsinformationen unten ein. Sie haben die Möglichkeit, eine große Auswahl von AWS-Produkten innerhalb des kostenlosen Nutzungskontingentes zu testen. Ihre Kreditkarte wird nur für die Nutzung belastet, die nicht durch das kostenlose Nutzungskontingent abgedeckt ist.“
Aber was das genau heißt steht nirgends ! Kannst Du uns bzw. mir da weitere Informationen geben?
Danke im voraus
Mike
Ich habe meinen Account seit ca. 2006 und damals brauchte ich keine KK – da hatte ich auch gar keine.
Das ist wahrscheinlich nur nötig, weil man Zugriff auf alle Amazon Web Services hat. Und manche davon sind eben auch kostenpflichtig.
Hi !
Danke für die schnelle Antwort…..
Habe jetzt einfach einen neuen account gemacht….
Jetzt ging alles relativ einfach….
Aber eine Frage noch Bitte….
hier oben steht :
/Amazon-Keys und Affiliate-ID
define(‚AWS_API_KEY‘, ‚DEIN_API_KEY‘);
define(‚AWS_API_SECRET_KEY‘, ‚DEIN_SECRET_API_KEY‘);
define(‚AWS_ASSOCIATE_TAG‘, ‚deine-amazon-id-21‘);
Wo finde ich den Api_key und den api_secret_key ?
Ich habe auf der Amazon Seite file keys gefunden … unter anderem habe ich 2 .pem files runter geladen ….
Der Inhalt fängt so an :
—–BEGIN PRIVATE KEY—–
MIIEvgIBADANBgkqhkiG9w0BAQ…
…….—–END PRIVATE KEY—–
(viele hundert zeichen)
und folgende :
—–BEGIN CERTIFICATE—–
MIIDhzCCAm+gAwIBA…………..
……….
J8JYA==
—–END CERTIFICATE—–
Sind das die von mir gesuchten keys
?
Kann es sein das die wirklich soooo lang sind ?
Dank im voraus
mike
sorry ! frage hat sich erledigt und kann gelöscht werden ! trotzdem Danke !
Aber eine Frage hätte ich da doch noch …..
Aktuell läuft alles wunderbar…. Aber wie hast du es geschafft alles in WordPress zu integrieren?
Z.B. auf dieser Seite hier: https://www.kritzelblog.de/amazon-fire-tv-kommt-nach-deutschland/
(Das dritte Bild mit dem Link zu Amazon funktioniert leider nicht! 1. Das Bild ist nicht vorhanden und 2. man kommt nur auf eine leere Seite!)
Hast du die Bilder in diesem Post über die API erstellt?
Nutzt du selber ein Plugin oder machst du das alles nur über die API selber?
Danke im voraus
Mike
Hallo,
das muss ja wirklich eine tolle Sache sein, aber leider kann ich das selbst nicht umsetzen, da ich überhaupt keine Ahnung von solchen Sachen habe
Hallo, schöner Beitrag. Gibt es einen bestimmten Grund die Daten in die eigene Datenbank zu schreiben? Ist die Limitierung der Amazon-Aufrufe der einzige Punkt der hierfür spricht? Viele Grüße
Ja, die Limitierung ist der Grund. Sollte auch der Ladezeit zugute kommen.
Pingback:Montag, 18. April 2016 – Amazon Store | schaemicon
Hi,
bekommt man eigentlich auch Bilder über die API?
Danke und VG
Ja,
steht in den Quelltexten, $smallimage etc.
Hey Steffen,
vielen Dank für den hilfreichen Artikel.
Gibt es eine Möglichkeit die Gesamtzahl der Bewertungen auszugeben inklusive Sterne oder hat das Amazon geblockt ? :-(
Gruß
Christian
Das soll zwar gehen, ist meines Wissens aber nicht gewollt von Amazon.
Hallo Christian,
die Bewertungen herauslesen ist nicht gewollt, jedoch kann diese aus dem HTML-Iframe herauslesen. Hier verwendet Amazon einfach ein Bild mit dem entsprechenden Namen. Auf diese Bild musst du zugreifen können. Hierzu brauchst Du nur einfach das Iframe parsen. Das kann man in 10 Min programmieren und ist kein Hexenwerk.
LG Stefan
Hallo
Mit {$EditorialReview->Content} und Amazonsimpleadmin,
gibts die Artikelbeschreibung.
Leider finde ich den API code nicht, würde mich über Tips freuen
Hallo Steffen,
vielen Dank! Ich hab das Thema vor 2 Jahren mal probiert und bin komplett gescheitert, da ich auch bei Null anfing bei der API. Dank deiner Anleitung (andere hatten nicht geklappt), hat es nach einer kleinen Modifikation bei nun tatsächlich geklappt.
Inzwischen hat sich aber etwas geändert. Der Preis lautet nun:
Alt:
$preis = $pxml->Items->Item->OfferSummary->LowestNewPrice->FormattedPrice;
Neu:
$preis = $pxml->Items->Item->Offers->Offer->OfferListing->Price->FormattedPrice;
Bei mir klappte das einspielen vom Preis in die DB aber nicht. Möglich wegen dem „Euro“ und KOMMA bzw SEMIKOLON Unterschied. Aber das sind Kleinigkeiten die ich noch angehen werde.
Zumindest klappt die Verbindung und die Daten werden gezogen.
Ich hab dann auch vor 1x am Tag einen Abgleich meiner Daten mit der von Amazon zu machen.
Danke :)
Freut mich! Ich habe mindestens eine Seite die noch auf diesem Skript hier basiert – der Preis wird aber korrekt dargestellt.
Ich müsste mal updaten, aber momentan ist nicht viel Luft dafür. Freut mich auf jeden Fall enorm, wenn jemand selbst Hand anlegt und nicht die üblichen Plugins und Themes nimmt, um am Ende auch nur Einheitsbrei zu bekommen.
Ich nutz es ja nicht für WP, sondern selbst programmierte Webseite.
Ich hab aber nun nen Problem festgestellt. Ich durchlaufe in einer Schleife (rund 100x) die Anfrage und schreibe das in die DB. Jedoch nach rund 10 Stück kommt „Request failed“. Bei den 100 Anfragen sind ca. 1/3 immer mit Fehlern. Aber immer andere. Sind es zu viele in zu kurzer Zeit? Wüsste aber nicht wie ich das anders abfragen kann.
Setz mal ein Sleep in die Schleife. Damit erzwingst Du eine Pause. Hat bei mir geholfen, weil manche Datensätze manchmal unvollständig waren.
https://php.net/manual/de/function.sleep.php
Bei vielen Anfragen darf die Pause natürlich nicht zu lang sein, weil sonst möglicherweise die Skriptlaufzeit des Servers erreicht wird. Vielleicht nicht gerade die professionellste Lösung, hat bei mir auf die Schnelle aber geholfen.
Das hatte ich, aber kam zu einer Fehlermeldung im Browser. Hab es nun über ein CronJob vom Server gemacht und dort klappt es :)
Hallo, guter Artikel und hat mich sehr viel weiter gebracht. Nun habe ich eine Seite erstellt und auch begonnen ASIN’s in meine MySQL db einzutragen und musste dann beim aktualisieren der Preise/Artikelbilder/Titel… feststellen, dass halt eben nicht für jeden Artikel über die response group ‚large‘ der Preis geliefert wird. Jedoch wie finde ich jetzt raus, wie ich an den Preis des bestimmten Artikel komm, also welche response group die richtige ist?
Ich hatte eher mal Probleme mit den Bildern, mit dem Preis noch nie.
Eventuell hilft der vorige Tipp mit der kurzen Pause weiter.
Habe eine sleep() -Fkt in meine Schleife eingebaut
Beispielsweise ist es diese ASIN B00BHXJDAM
Woran liegt das, dass ich dazu keine Details über die Api abfragen kann außer Titel, aber halt keinen Preis? Meine nächste Frage ist, ich habe mich danach schon „dumm“ gesucht, wie ich die Käuferbewertungen, also was bei Amazon anhand der 5 möglichen Sterne ausgegeben wird, heranbekomme?
Vielen Dank schon einmal!! Hoffe, dass mir jemand weiterhelfen kann…
Wenn ich nach der ASIN bei Amazon suche, kommt das: Ihre Suche nach „B00BHXJDAM“ ergab leider keine Produkttreffer.
Was kommt denn da für ein Titel bei der API raus?
Zu Problem 2: Amamzon liefert diese Daten nicht per API, weil diese nicht auf anderen Seiten erscheinen sollen. Diese müssten also gescraped werden. So zumindest mein aktueller Stand.
Also ich vermute das Problem erkannt zu haben.. Es handelte sich in dem Beispiel um Reitstiefel.
https://www.amazon.de/Covalliero-321008-Reiterstiefel-Kinder-schwarz/dp/B004OSF8W4/ref=sr_1_1?ie=UTF8&qid=1480534756&sr=8-1&keywords=reitstiefel%2Bkinder&th=1
B00BHXJDAM (ohne größenauswahl)
B004OSF8W4 (mit größenwahl)
Ich vermute mal, dass es daran liegt, dass man erst eine größe wählen muss, denn dann ändert sich auch die Asin auf der Amazonseite.
Was kann ich nun aber tun um dennoch einen Preis normal ausgeben zu können, ohne jede einzelne Asin(nach größe..) in meine Datenbank zu übernehmen?
Vielen Dank
Hallo Steffen,
tolle Erklärung der API. Ich habe ein Problem, für das Du eventuell eine Lösung hast.
Kategorie Bücher.
Ich benötige die Unterkategorie. zb. Bücher/Thriller. Ich möchte die Artikel gern sortieren im eigenen Shop und benötige also nicht nur die Ober-Kategorie Bücher, sondern auch die entsprechende Unterkategorie, wie Krimi, Fachbuch, Kinderbuch usw.
Beispiel: Bücher > Fachbücher > Pädagogik > Unterrichtsvorbereitung > Allgemein
Gibt es eine Möglichkeit das auszulesen?
1000 Dank im Voraus,
Sandra
Hallo Sandra,
so aus dem Stehgreif habe ich da nix parat. Eventuell hilft dir das API-Scratchpad weiter:
http://webservices.amazon.de/scratchpad/index.html
Hallo Steffen,
vielen Dank für deine Anleitung.
Kannst du mir noch sagen, wie ich die Artikelbeschreibung von Amazon auslesen kann? EditorialReview schaffe ich nicht im Script einzubinden.
Danke.
So spontan jetzt nicht, da ich die noch nie gezogen habe. Vielleicht hilft auch dir das API-Scratchpad weiter: http://webservices.amazon.de/scratchpad/index.html
Hi Steffen,
viele Dank für Deinen echt tollen Beitrag! Sehr verständlich und für Anfänger super geeignet die nicht direkt Geld in teure Themes stecken wollen.
Kleine Bemerkung am Rande, der Link zur aws_signed_request.php ist down wenn ich das richtig sehe und wenn du mal Zeit hast kannst du den Artikel vielleicht noch um die Einbindung in WordPress erweitern ;) Ansonsten weiter so super Arbeit!
LG Thomas
Vielen Dank, ich habe den Link bearbeitet. Da ist mir bei der Umstellung auf SSL auch hier ein https mit reingerutscht und dann weigern sich die Browser diesen auch aufzurufen.
Hallo Steffen,
das Tutorial ist sehr toll geworden. Ich habe mir damals eine Webseite mit CI erstellt und die ASIN darin verwaltet. Man kann in einem API- Abruf jeweils bis zu 10 Produkte sich von Amazon schicken lassen. In einem Monat kann man wohl nur eine bestimmte Anzahl von Produktdaten sich herunter laden. Dies versuche ich damit zu umgehen. Auch Updates für Preis und Bewetetungen können so 10 man so schnell gemacht werden.
LG Stefan
Danke,
Ich bin mir jetzt nicht ganz sicher, aber die Beschränkung auf 10 Produkte/Abruf meine ich schon mal auf irgendeinem Wege umgangen zu haben.
Das mit dem monatlichen Abruf wäre mir neu, ich habe Seiten, da aktualisiere ich stündlich die Produktpreise.
Hi Steffen :)
Erst mal danke für den ausführlichen und sauberen Beitrag!
Ich hätte noch eine kleine Frage. Mit dem Code werden die Daten jetzt in der Datenbank gespeichert oder? Um sie dann benutzen zu können muss man die Datenbank in WordPress wieder abfragen, oder?
Des Weiteren wollte ich fragen, ob man das als Plugin einrichten kann. Sprich das, dass Plugin alle 12 Stunden die Daten abfrägt und in die Datenbank einträgt.
Liebe Grüße
Micha :)
Hi, vielen Dank. Du musst nur den Cronjob der die Aktualisierung anstößt auf 12 Stunden einstellen.
Wenn du das in WordPress nutzen möchtest, gibt es da (glaube ich) eine eigene Cronjob-Funktion für. Hier bin ich allerdings überfragt.
Hallo Steffen,
vielen Dank für deinen Artikel!
Du schreibst, dass man bei Büchern an den Klappentext rankommt. Hast du das selbst ausprobiert? Mir gelingt es mit ItemLookup und der Large-ResponseGroup nämlich nicht, egal welche ISBN ich nutze. Auch mit anderen ResponseGroups war ich nicht erfolgreich.
Welche Parameter hast du genutzt?
Beste Grüße!
Thomas
Hallo !
VIelen Dank für deine Bemühungen !!! Deine Beschreibung ist wirklich sehr hilfreich !
Könntest du mir vielleicht bei einer Sache helfen?
Ich habe alles so gemacht wie beschrieben und Amazon sagt mir das die Sigantur falsch wäre.
Habe auf der DE seite selbstverständlich einen Access Key und Secret Key anfertigen lassen.
VIelen Dank im vorraus
Hochachtungsvoll
Hörnig, Davin
Hey Ich habe dir vor ein paar Minuten geschrieben.
Ich möchte mich ein erneutes mal bei dir vielmals bedanken !
Ich habe es hinbekommen <33333
du bist der hammer !
Nur nicht zu viel Lob, aber danke.
Das Problem sitzt in der Regel vor dem Bildschirm. Pause machen, spazieren gehen, Hirn formatieren – hilft. Heute wieder erlebt…
Hey Steffen,
wenn wir unsere Seite soweit ans laufen kriegen, würden wir dir gerne als dankeschön etwas Geld schicken. Dauert paar Monate noch aber dann würden wir uns bei dir nochmal melden.
Ohne dich hätten wir das niemals im Leben hinbekommen.
:-) Da sage ich nicht nein, kannst aber auch einfach meine Amazon-Links nutzen.
Das ist übrigens auch wichtig:
https://www.kritzelblog.de/techniken-fuer-webentwicklung/dsgvo-und-affiliate-apis-bilder-einbinden/
VIelen Dank für den Link ! Darf ich dir noch weitere fragen privat stellen oder wäre es dir lieber wenn ich alle fragen hier stelle?
Gerne per Mail – wird hier vielleicht etwas unübersichtlich. Ich kann ja den Artikel dann ergänzen.
Hey Steffen,
ich habe dir bereits 2 mal geschrieben per Email, hab ich etwas falsch gemacht weil du nicht geantwortet hast.
Wenn möglich wäre nett wenn du dich melden könntest.
davin.hoernig@dirin.de
Irgendwie will es nicht zum laufen bringen
Habe:
DB Angelegt mit div. Spalten (asin, preis, name…)
Productfunction 2.0 „installiert“
PHP Script gefüllt aber es kommt nur
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /www/htdocs/xxxxxxxx/command.php on line 12
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /www/htdocs/xxxxxxxx/command.php on line 14
Kennt ihr Freelancer oder co., welche die inst. übernehmen – wir nurzen leider kein CMS so dass es kein Plugins für das Thema gibt
Moinsen,
stimmen die Zugangsdaten zur Datenbank? Eigentlich zeigen die Fehlermeldungen anhand der Zeilennummern ziemlich genau, wo der Hund begraben liegt.
Das gleiche Problem habe ich leider auch. Bei WordPress kann man scheinbar nicht mit der $db arbeiten. Dort muss es die $wpdb sein. Die bekomme ich aber nicht initialisiert und ebenfalls immer den Fehler Warning: mysqli_query()
Leider konnte ich den Fehler noch nicht finden und weiß einfach nicht, wie ich die $wpdb zum Laufen bekomme. Mit dieser globalen Variablen kann man wohl mit der WordPress Datenbank kommunizieren.
Ich hoffe ich finde die Lösung noch irgendwo… Ansonsten bis hierhin gutes Tutorial.
Danke für die schnelle Antwort die config.php zeigt beim aufruf keine fehler
Sofern mit confic.php eine reine db verbindung gemeint ist
Beispiel
$db_server = „localhost“; // Hostname
$db_user = „XXXX“; // Benutzername
$db_pass = „XXXX“; // Kennwort
$db_name = „XXXX“; // Name der Datenbank
$link = mysql_connect($db_server, $db_user, $db_pass) or exit („Es konnte keine Verbindung zum Datenbankserver hergestellt werden.“); // Verbindung zum Datenbankserver
mysql_select_db($db_name, $link) or exit („Diese Datenbank \“$db_name\“ existiert nicht.“);
In der config.php die inkludiert wird, sollte das so drinstehen, ja. Manchmal ist der Fehler im Detail. Anführungszeichen zu viel, kein Semilkolon am Ende…
mysqli_connect <- das i...
Hallo,
sehe ich aktuell nicht – lasse aber nochmal zwei weitere Augen prüfen.-
Sind ggf. die $ falsch im PHP Skript schreiben Sie:
$result = mysqli_query($db,$sql)
die finde ich nicht in der confic.php
alternativ vermute ggf. ein falsch tag am ende der php datei – meine endet mit:
#datei mit phpscript
$titel = $pxml->Items->Item->ItemAttributes->Title;
}
}
};
?>
#Leerzeilen rausgenommen
mysqli >> könnte der fehler in der den inhalten der db liegen ?
Ist denn in der DB was drin? Schreib mir mal eine Mail an info@digital-moves.de, dann kann ich mir das mal in Ruhe anschauen. Das klingt nach so einem typischen „Kopfklatscher“-Problem.
ja es sind die asins gefüllz aber auch nur die asins rest ist leer
db mit muster asins sieht wie folgt aus
https://picload.org/view/daoaoior/image.png.html
https://picload.org/view/daoaopoi/image.png.html
Danke für jede Hilfe im Voraus
Danke für die Hilfe – hat alles super geklappt und auch die Hürden eines Wikis (Autoformatierung) sind gelöst.
Aktuell eines der letzten Hürden: In der DB sind Umlaute zerschossen – vermutlich da nicht UTF-8
löst ihr das beim Import oder beim Export`?
Schön, wenns funktioniert hat. Das mit den Umlauten dürfte an deiner Datenbank liegen. Steht die auf UTF-8?
Pingback:Drei Möglichkeiten Produktbilder DSGVO-konform einzubinden
Hey Steffen,
wenn wir unsere Seite soweit ans laufen kriegen, würden wir dir gerne als dankeschön etwas Geld schicken. Dauert paar Monate noch aber dann würden wir uns bei dir nochmal melden.
Ohne dich hätten wir das niemals im Leben hinbekommen.
Hallo. Danke für die Anleitung und die vielen Tipps.
Ich habe das Problem das Amazon meine Abfragen drosselt. Wenn ich 20 Artikel hintereinander abfrage macht die Schnittstelle irgendwann dicht und ich muss warten. Kann man das umgehen, bzw. wie kann man das elegant lösen? Gibt es einen Unterschied zwischen API und AWS?
Irgendwo oben hatte ich mal den Tipp gegeben, eine Sekunde Pause zwischendrin einzufügen. Hilft bei mir auf jeden Fall, den Cronjob sauber durchlaufen zu lassen.
moinsen ….
wenn ich o.g. code verwende kommt bei preis immer nur 0.00 in meine DB
liegt wohl daran das ich für das Feld „preis“ decimal 5,2 gewählt habe…..
da aber in der variablen $preis folgendes ausgegeben wird: EUR 3.33 kann das natürlich
nicht in das Feld eingetragen werden. Wie habt ihr das geregelt !?
hat sich erledigt …. habe es wie folgt erledigt :
$preis = str_replace(„EUR“,““,$preis);
$preis = str_replace(„,“,“.“,$preis);
Trotzdem noch eine Frage…. Und zwar zu den Response Groups
im o.g. Datenbank-beispiel steht in Zeile 18 „Anbieter“ das finde ich allerdings im unteren skriptbeispiel nicht!
dort steht dann nur :
} else {
$titel = $pxml->Items->Item->ItemAttributes->Title;
}
}
bzw. ja etwas tiefer noch weitere Beispiele …. Aber wie kann ich nun genau rausfinden unter welchen Response Groups ich noch mehr bzw. andere Daten finden kann wie z.B. EAN code oder ähnliches= gibt es eine Tabelle wo die Response Groupe steht und dahinter wie man diese ausliest ähnlich wie bei „large“ dann per $titel = $pxml->Items->Item->ItemAttributes->Title;
Leider habe ich die Infos nicht bei der Amazon Api gefunden! ?
Danke wie immer im voraus für jegliche Unterstützung
Hilft dir das weiter?
https://docs.aws.amazon.com/AWSECommerceService/latest/DG/CHAP_ResponseGroupsList.html
Hallo zusammen, ich habe die API jetzt gut 3 Monate ohne Probleme genutzt, allerdings sperrt Amazon immer wieder meine Keys, weil kein Umsatz generiert wird über meine HP.
Gibt es eine Möglichkeit, dies zu umgehen, oder dafür zu zahlen, dass die Keys einfach nur für Produktdaten genutzt wird?
Danke im Voraus
Wird der geringe Umsatz echt als Grund angegeben?
Pingback:Pixelbuben, Amazon API und Block Lab. | Pixelbart
Hallo,
erstmal vielen Dank für dein Skript. Ich probiere es gerade aus und bekomme leider „Request failed“ raus.
Ich habe es zum testen erstmal ohne Datenbank probiert und will einfach nur den Titel von einem produkt haben zum testen.
//Amazon-Keys und Affiliate-ID
define(‚AWS_API_KEY‘, ‚***‘);
define(‚AWS_API_SECRET_KEY‘, ‚***‘);
define(‚AWS_ASSOCIATE_TAG‘, ‚***‘);
include(‚aws_signed_request.php‘); //Datei inkludieren
$asin = ‚B000VH3FNQ‘;
// generate signed URL
$request = aws_signed_request(‚de‘, array(
‚Operation‘ => ‚ItemLookup‘,
‚ItemId‘ => $asin,
‚ResponseGroup‘ => ‚Large‘), AWS_API_KEY, AWS_API_SECRET_KEY, AWS_ASSOCIATE_TAG);
// do request (you could also use curl etc.)
$response = @file_get_contents($request);
if ($response === FALSE) {
echo „Request failed.\n“;
} else {
// parse XML
$pxml = simplexml_load_string($response);
if ($pxml === FALSE) {
echo „Response could not be parsed.\n“;
} else {
$titel = $pxml->Items->Item->ItemAttributes->Title;
}
}
An Key & Secret sollte es nicht liegen. Habe ich mehrfach kontrolliert.
Muss ich sonst was beachten?
Evtl kannst du mir ja helfen :)
Wie alt ist dein Zugang zur API? Das Problem tritt hier gerade bei einem recht neuen Account auch auf.
Anfrage an den Support läuft.
Hi, bei mir bleibt das Skript leider an der gleichen Stelle hängen. Gibt es schon Infos oder Lösungsansätze?
LG
Hi, auch bei mir hängt es sich an dieser Stelle auf. Gibt es denn schon einen Lösungsansatz oder Infos dazu? LG
Hi, auch ich erhalte „request failed“ von gleicher Stelle. Gibt es hierzu schon Lösungsansätze? Mein Zugang ist schon etwas älter. Lediglich die Keys habe ich erneuert, diese stehen jedoch auf „aktiv“.
LG
Hallo zusammen!
Bei mir funktioniert die Amazon API seit April 2018 verdammt gut (dank diesem Forum).
Jedoch bekomme ich von heute auf morgen ohne eine Änderung folgenden hinweiß.
AWS Access Key ID: ********************. You are submitting requests too quickly. Please retry your requests at a slower rate.
Die Sternchen sollen meine ID darstellen, hab ich jetzt geschwärzt.
Was da steht ist absoluter käse, kein mensch fragt da irgend etwas an. Hab berreits den Key geändert und den support angeschrieben und die wissen auch nichts.
Hat jemand schonmal so ein problem gehabt?
Guten Tag,
sehr guter Beitrag!
Eine Frage habe ich da aber noch. Mal angenommen, es gibt ein Produkt in 3 Größen und 3 Farben.
Bei der Auswahl von einer anderen Größe und Farbe ändert sich der Preis.
Gibt es eine Möglichkeit alle Preise abzufragen um am Ende ein „Mindestens – Maximal“ anzugeben?
Also quasi wenn das günstigste 10 EUR kostet und das teuerste 100 EUR, dass z.B. „10 – 100 EUR“ angezeigt wird?
Exakte Frage: Bietet die Amazon API eine Möglichkeit alle Preise eines Produkts in verschiedenen Formaten/Größen/Farben auszugeben?
Würde mich über eine Antwort sehr freuen.
Fg
Das sollte möglich sein, konkret kann ich da aber nichts nennen. Versteckt sich alles in den Response-Groups.
Pingback:Pixelbuben, Amazon API und das Plugin Block Lab. – Pixelbart
Hi Steffen,
ich nutze die aws_signed_request.php (Danke für die Empfehlung!) schon länger ohne Problem. Seit einiger Zeit erhalte ich aber von Amazon die Aufforderung, auf die Api 5.0 umzustellen (PA API 4.0 wird am 9.3.2020 deaktiviert). Weißt Du, ob es für die aws_signed_request.php ein Update auf die Api 5.0 gibt?
Viele Grüße,
Michael
Wollte ich mich auch schon längst drum gekümmert haben, aber ich bin bisher nicht dazu gekommen.
Hallo Steffen,
Deine Anleitung hatte mir damals super geholfen. Inzwischen ist die API 5 aktiv und die alte funktioniert nicht mehr. Leider mag die API auch keine Schleifen. Hast du bereits deine Seiten damit umsetzen können und uns wieder ein paar Tipps geben?
Danke und Viele grüße
Ich bin leider noch nicht dazu gekommen, da was zu machen.
Pingback:Pixelbuben, Amazon API und das Plugin Block Lab – Pixelbart
Vielleicht hilft das jemanden weiter:
https://webservices.amazon.com/paapi5/documentation/without-sdk.html
Etwas scrollen, da gibt es PHP Kode.
Hallo,
da das ganze jetzt mit der API 5 nicht mehr funktioniert, habe ich eine schnelle Anleitung geschrieben:
https://1manfactory.com/salesrank-ueber-amazon-api-abfragen/
Auch wenn es nicht mehr aktuell ist, habe genau die Info zur API gefunden, bei der ich ein großes Fragezeichen über den Kopf habe. Besten Dank :)