Wenn man Bücher liebt und gerne viele Bücher hat, kommt man vielleicht irgendwann an einen Punkt, in dem man die Übersicht verliert, ob man ein bestimmtes Buch schon hat oder nicht. Seit einiger Zeit bietet Amazon zwar den Hinweis auf den Buchseiten an: “Sie haben dieses Buch am xxx gekauft.” Aber man kauft ja auch nicht alle Bücher bei Amazon.
Es kann natürlich auch sein, dass man ein Buch zu einem bestimmten Thema liest und dann feststellt, dass man bereits ein ähnliches Buch gelesen hat, man sich aber partout an den Namen nicht erinnern kann.
All dies und weil ich gerne Informationen sammle, brachte mich am Wochenende dazu eine Lösung zu entwickeln. Mit Hilfe von pyAWS, einem Wrapper für die Amazon Web Services in Python, viel Geduld und Spucke habe ich ein Pythonscript geschrieben.
Man übergibt dem Script eine EAN, kann man prima mit einem Barcodescanner einlesen, eine ISBN oder einen beliebigen Suchstring in “”. Das Programm sucht bei amazon.de nach dem Buch und man erhält in 99% der Fälle auch sofort ein eindeutiges Ergebnis.
Wird auf der deutschen Amazonseite nichts gefunden, so wird gleich noch mal eine Anfrage an amazon.com gesendet.
Neben den üblichen Angaben wie Autor, Titel, Erscheinungsjahr, Verlag, Detail-URL, URL zum Titelbild, hole ich mir außerdem den Editorial Review, also das was Amazon über das Buch schreibt, sowie die Customer Reviews inkl. deren Rating.
So habe ich zu jedem Buch meistens recht viele Informationen, die ich dann per Copy und Paste in mein Devonthink kopiere. Devonthink hat eine build-in “Artifical Intelligence”, mit der es Dokumente klassifiziert, Relationen zu anderen Dokumenten findet und ähnliche Dokumente anzeigen kann.
Diese Zuordnung ist in den meisten Fällen erstaunlich gut, so dass sie fast dem Amazon-Meme “Leute, die dieses Buch gekauft haben…” entspricht. Als Beispiel hier einmal das Buch “CSS Mastery” und man sieht am Rand, dass alle bereits erfassten Bücher zu diesem oder ähnlichen Themen angezeigt werden. Nette Sache.
Ich war erstaunt, dass man mit pyAWS und einem entsprechenden Licence-Key, den man von Amazon braucht, innerhalb von wenigen Minuten die ersten vorzeigbaren Ergebnisse bekommt. Dann steigt die Lernkurve allerdings stark an. Da weder Amazon noch pyAWS über eine mir verständliche Doku verfügt.
Nach einigem Hin und Her, habe ich jetzt jedoch alle Dinge, die ich zu einem Buch wissen wollte, aus Amazon herausgeprügelt.
Wie funktioniert das Script im Einzelnen:
from pyaws import ecs
import sys
import re
reviews = ""
# Ist das ein deutsches oder ein englisches Buch? Bei englischen Buechern,
# wird direkt auf der englischen Seite gesucht.
if sys.argv[1] != "en":
ecs.setLocale('de')
ean = sys.argv[1]
else:
ean = sys.argv[2]
# Hierzu benoetigt man einen License Key, den man bei Amazon bekommt
ecs.setLicenseKey('LICENSE KEY')
# Das sind die Informationen, die diese Abfrage zurückliefert
# ['ASIN', 'Author', 'Binding', 'CustomerReviews', 'DetailPageURL', 'DeweyDecimalNumber',
# 'EAN', 'Edition', 'EditorialReviews', 'ISBN', 'ImageSets', 'Label', 'Languages', 'LargeImage',
# 'ListPrice', 'Manufacturer', 'MediumImage', 'NumberOfItems', 'NumberOfPages', 'OfferSummary',
# 'PackageDimensions', 'ProductGroup', 'PublicationDate', 'Publisher', 'SalesRank', 'SmallImage',
# 'Studio', 'Title', '__doc__', '__module__']
try:
books = ecs.ItemSearch(ean, SearchIndex='Books', ResponseGroup='Medium,Images,ItemAttributes,
Request,Reviews,EditorialReview,Subjects')
except:
# Keine eindeutige Antwort vom Server
# Vielleicht doch ein englisches Buch?
ecs.setLocale('us')
books = ecs.ItemSearch(ean, SearchIndex='Books', ResponseGroup='Medium,Images,
ItemAttributes,Request,Reviews,EditorialReview,Subjects')
Mit ecs.setLocal(’de’) legt man die Amazon-Seite fest auf der gesucht werden soll, hier amazon.de. Mit ecs.setLocal(’us’), nimmt man amazon.com, was die default-Einstellung ist. Man kann dem Script vor der EAN oder dem Suchstring auch das Kürzel eb übergeben, so dass sofort auf der englischen Seite gesucht wird.
Um diesen und einige andere Services von Amazon nutzen zu können braucht man ein AWS-Account, mit dem man einen Key erhält, den man bei einigen der Abfragen benötigt. (AWS-Dokumentation | Andere Doku)
Man kann die unterschiedlichsten Abfragen bei Amazon machen, hier wird nach “Books” gesucht, was bei ‘de’ hauptsächlich deutsche Bücher anzeigt. Alternativ kann man natürlich auch nach “ForeignBooks” suchen oder aber nach “SportingGoods”. Man kann die Suche auch noch weiter eingrenzen, in dem man sich beispielsweise auf einen bestimmten “Manufacturer” also Verlag oder Hersteller beschränkt. Das war in diesem Falle aber gar nicht nötig. Innerhalb der Developer Dokumentation kann man die unterschiedlichen Suchkombinationen nachschlagen, leider Frames und nicht direkt verlinkbar.
Mit den ResponseGroups sagt man, welche Informationen man gerne hätte. In der Default-Abfrage sind nämlich weder Urls zu Bildern (Images), noch Informationen wie Erscheinungsjahr u.ä. (ItemAttributes) vorhanden. Mit Reviews erhält man alle Benutzer-Reviews und mit EditorialReview, die von Amazon veröffentlichten. Hierbei sei allerdings angemerkt, dass die deutsche Seite in 95% der Fällen keinen EditorialReview zurück liefert, auch wenn auf der Webseite des Buches einer angezeigt wird. In seltenen Fällen gibt es unter amazon.com dann einen Review. Bei Subjects handelt es sich um die Kategorien unter denen das Produkt bzw. zu finden ist.
Die Ergebnisse, die Amazon zurückliefert sind manchmal etwas schwierig zu entpacken. Hier hilft meist ein
print dir(books[0])
weiter. Das gleiche gilt natürlich auch für tiefere Ebenen
print dir(books[0].ItemAttributes)
Ausgeben werden die Informationen dann mit:
print "EAN: ", books[0].ISBN print "ISBN: ", books[0].Title print "ASIN: ", books[0].Author
usw. wobei natürlich nicht immer alle Angaben vorhanden sind.
Dateien:
amazon.py
appscript.scpt

One Comment
… wirklich anspruchsvoll und kreativ. respekt! 8-)
Post a Comment