Bücherdatenbank mit Amazon und Devonthink 2.0

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

4 comments on “Bücherdatenbank mit Amazon und Devonthink 2.0

  1. jan
    2009-05-06 at 15:45 #

    … wirklich anspruchsvoll und kreativ. respekt! 8-)

  2. Sebastian
    2012-01-23 at 00:24 #

    Hi Nik,

    Echt klasse Projekt. Bin fleißiger DT Nutzer und leider ohne Programmier Kenntnisse. Kannst du mir eine ganz kurze Anleitung geben, wie ich das zum laufen bekomme?

    Kann ich die iSight zum Barcode scannen nutzen?

    Beste Grüße,
    Sebastian

  3. Sebastian
    2012-01-23 at 08:38 #

    Leider hat mein letzter Kommentar wohl nicht geklappt – top Arbeit mit dem Skript!

    Wie bringe ich das ganze jetzt mit DevonThink zum Laufen? Habe meinen AWS Key und Python installiert, wohin muss die Datei kopiert werden und wie ist der Workflow aus DevonThink heraus?

Trackbacks/Pingbacks

  1. The Balcony » Web Tip: How to access Amazon from DEVONthink - 2009-10-12

    […] Nicole’s blog article explaining the script here (in German) or read Google’s attempt of an English translation […]

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s