Amazon Web Services
Wissen ist Macht, das wusste bereits der Philosoph Francis Bacon im 16. Jahrhundert. Und es gilt heute mehr denn je. Unternehmen wie Google speichern nicht grundlos jedes Bit an Information, das sie in die Hände bekommen. Mit Daten eröffnen sich Möglichkeiten: Data Mining, d.h. das Entdecken neuer Zusammenhänge in alten Daten, und der Einsatz neuronaler Netze sind nur zwei davon. Generell gilt: Je mehr Informationen, desto besser.
Beginnen wir mit den Informationen, die bereits für den automatisierten Abruf per Software aufbereitet sind: Web Services.
Was für uns Menschen Websites sind, das sind für Computer Web Services - Internet-Dienste, die in der Regel von größeren Firmen wie Amazon, Google oder eBay angeboten werden und Unmengen an Informationen in (vornehmlich) maschinenlesbaren Formaten liefern.
Im Gegensatz zu den meisten Websites werden die Informationen bei Web Services als XML-Dateien abgerufen. XML (Extensible Markup Language) ist “ein Standard zur Erstellung strukturierter, maschinen- und menschenlesbarer Dateien.” [1]
Diese XML-Dateien werden über das SOAP-Protokoll (Simple Object Access Protocol) vom Server abgerufen und lokal weiterverarbeitet. Erfreulicherweise bleibt es dem Software-Entwickler dabei oft erspart, sich mit den Hintergründen von SOAP, XML und Co zu befassen, wenn bereits Module für die Programmiersprache und den Web Service der Wahl existieren.
Wirklich deutlich wird die Nützlichkeit von Web Services erst anhand einiger Beispiele. Teil I der “Daten, Daten, Daten”-Artikelserie befasst sich mit Amazon und dessen Web Service [2], der Zugriff auf die Daten von mehreren Millionen Büchern, CDs, DVDs, uvm. ermöglicht.
Zur Demonstration eignet sich die Programmiersprache Python sehr gut, da nicht nur ein Modul für den Amazon Web Service existiert, sondern auch die Syntax von Python übersichtlich und auch für Nicht-Python-Programmierer zu verstehen ist. Nachdem das amazon.py-Modul [3] in das “Lib”-Verzeichnis der Python-Installation kopiert wurde, lässt sich folgendes Programm ausführen:
import amazon
import sys
AmazonResults = \
amazon.searchByKeyword(keyword='XML',locale='de')
for AR in AmazonResults[:3]:
try:
print 'Autor(en):'
if len(AR.Authors.Author)<=3:
for n in AR.Authors.Author: print n
else:
print AR.Authors.Author
print 'Titel:', AR.ProductName
print 'Preis:', AR.OurPrice
print 'Rating:', AR.Reviews.AvgCustomerRating
except:
print 'Fehler ('+str(sys.exc_info()[0])+')'
print '===='
Zuerst werden die zwei benötigten Module — “amazon” für den Web Service und “sys” für die Fehlerbehandlung — initialisiert, dann die Suchergebnisse für die Suche nach “XML” (keyword=’XML’) im deutschen Amazon-Angebot (locale=’de’) abgerufen. Mit nur einer Zeile selbstgeschriebenem Code haben wir also die entsprechenden Daten vom Amazon-Server heruntergeladen und als Objekt in Python übernommen.
Die restlichen Zeilen dienen lediglich der Demonstration des Zugriffs auf das AmazonResults-Objekt und der Ausgabe der ersten drei Suchergebnisse auf dem Bildschirm. Tritt bei Zugriff auf eines der Attribute eines AR-Objekts ein Fehler auf, weil z.B. ein Produkt noch von keinem Kunde bewertet wurde (kein Rating), so gibt das Programm eine kurze Diagnose-Meldung aus und springt zum nächsten AR-Objekt der AmazonResults-Liste.
Auf eine Besonderheit möchte ich noch hinweisen: Um bei mehreren (hier: bis zu drei) Autoren eine Liste der Namen auszugeben, überprüfen wir zuerst die Länge des AR.Authors.Author-Objekts. Ist die Länge kleiner drei, so enthält die Liste mehrere Strings mit den Namen der Autoren — ist sie größer drei, so enthält das Objekt einen String, den Namen des Autors, und len(AR.Authors.Author) gibt die Anzahl der Buchstaben an. (Zugegeben, keine besonders elegante Implementierung — Hinweise für Verbesserungen nehme ich unter andreas@aiplayground.org gerne entgegen.)
Wie sieht das Resultat des Beispielprogramms nun letztendlich aus? So:
Autor(en):
Robert Eckstein
Michel Casabianca
Titel: XML kurz & gut
Preis: EUR 8,00
Rating: 3.78
===
Autor(en):
H Behme
S Mintert
Titel: XML in der Praxis . Professionelles Web-Publishing mit der Extensible Markup Language
Preis: EUR 39,95
Rating: 3.85
===
Autor(en):
Helmut Erlenkötter
Titel: XML
Preis: EUR 9,90
Rating: 5
===
Dieses kurze Beispiel umfasst nur einen Bruchteil der Möglichkeiten, die die API bietet: Neben den verwendeten Daten lassen sich auch ISBN-Nummern, der Verkaufsrang, die URL des Produktfotos sowie des Produkts, der Preis für gebrauchte Waren, einzelne Rezensionen und vieles mehr abrufen, wobei unterschiedliche Produktarten (Bücher/CDs/Elektronikartikel/…) unterschiedliche Informationen bieten.
Ich kann nur dazu raten, mit den verschiedenen Optionen zu spielen, eventuell einen Blick in die offizielle Online-Dokumentation zu werfen und sich selbst an der Web-Services-Programmierung zu versuchen. Es lohnt sich.
[1] Wikipedia: XML
[2] Amazon Web Services
[3] PyAmazon-Modul
[4] AI Playground: Google Web APIs
