Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2008.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Greifen Sie auf per Webservice auf die Buchdaten von Amazon zu.

Techniken

Formulare, VBA, XML

Voraussetzungen

Access 2000 oder höher

Beispieldateien

Buecherverwaltung.mdb

Shortlink

634

Amazon Webservices per VBA nutzen

André Minhorst, Duisburg

Der Amazon Associates Web Service bietet den Zugriff auf die in Amazon gespeicherten Produktdaten an. Dazu gehören längst nicht mehr nur Bücher, CDs und DVDs, sondern auch Elektrogeräte, Kleidung und vieles mehr. Der Zugriff darauf ist nicht nur interessant, wenn man Amazon-Partner ist und die Artikel gegen Provision auf seiner eigenen Webseite feilbietet, sondern auch zum reinen automatischen Einlesen von Produktdaten - zum Beispiel für die ebenfalls in dieser Ausgabe vorgestellte Bücherverwaltung.

Webservices

Webservices sind Anwendungen, die man über eine URL ansprechen kann und über die man eine Anfrage schickt, um eine bestimmte Information zu erhalten. Prinzipiell kann man diese mit einer Internetseite im Browser vergleichen: Sie tragen die URL in das entsprechende Textfeld ein und erhalten als Antwort eine Internetseite. Webservices sind nun noch eine Stufe einfacher geschnitzt, denn ihre Antwort kommt nicht in Form einer formatierten Webseite, sondern als XML-Dokument, das man noch auswerten muss. Auch ist die Anfrage keine einfache URL, sondern sie enthält noch weitere Parameter, welche die eigentliche Anfrage ausmachen. Auch für das Zusammenstellen und Versenden der Anfrage sowie das Empfangen und Auswerten der Antwort muss man selbst durch geeigneten Code Sorge tragen.

Es gibt verschiedene Möglichkeiten, eine Anfrage zu formulieren; im Falle des Amazon Associates Web Services in Kombination mit Access/VBA geschieht dies am einfachsten über eine sogenannte REST-Anfrage (Representational State Transfer). Dies bedeutet, dass die Parameter einfach an die URL des Webservice angehängt werden. Die Antwort erhält man von Amazon dann in Form eines XML-Dokuments.

Amazon Web Services

Den einfachsten Einstieg in die Amazon Webservices finden Sie über das deutsche Internetangebot unter http://www.amazon.de, wo Sie links im Bereich Entdecken einen Eintrag Für Entwickler|Amazon Web Services finden. Der deutschsprachige Segen findet hier allerdings ein abruptes Ende, denn bereits der Verweis zum Web Services Software Developer‘s Kit (http://www.amazon.com/webservices) führt zu einer englischsprachigen Seite, die einen überdies nicht gerade mit der Nase auf den Download stößt.

Das ist aber auch nicht schlimm, denn wenn man einmal dort ist, besorgt man sich am besten direkt einen Amazon Web Services account. Dafür brauchen Sie eine E-Mail-Adresse und einige Daten wie Ihre Adresse et cetera. Amazon sendet Ihnen eine Bestätigung des neuen Accounts, der unter anderem einen Link zu einer Seite mit einer Access Key ID enthält. Auf dieser Seite finden Sie das wichtigste Element für Ihren Zugang zu den Amazon Web Services (s. Abb. 1).

pic001.tif

Abb. 1: Für den Zugriff auf die Amazon Web Services benötigen Sie eine Access Key ID.

Wenn Sie die Beispieldatenbank mit dem Amazon Associates Web Service ausprobieren möchten, müssen Sie sich übrigens zwangsläufig einen eigenen Account besorgen - die Beispieldatenbanken enthalten keinen gültigen Schlüssel.

Beispieldatenbank

Mit dieser ID bewaffnet können Sie eine erste Beispieldatenbank erstellen. Die Access Key ID speichern Sie der Einfachheit halber in einer global zugänglichen Konstanten in einem Standardmodul namens mdlGlobal:

Public Const cDeveloperToken As String = _

"ABCDEFGHIJ0123456789"

Bedingungen

Die Benutzung der Amazon Webservices ist nur unter bestimmten Bedingungen erlaubt und kostenlos. Dazu gehört, dass der Zugriff hauptsächlich dazu gedacht sein muss, Kunden auf die Webseiten von Amazon zu lenken, und dass man die von Amazon gewonnenen Daten nicht ohne schriftliche Genehmigung weiterveräußert oder verteilt oder diese für mobile Endgeräte aufbereitet. Außerdem ist nur eine Anfrage pro Sekunde pro Access Key ID möglich.

Die genauen Nutzungsrechte müssen Sie aber ohnehin bei der Anmeldung an den Amazon Associates Web Service absegnen. Die ebenfalls in dieser Ausgabe von Access im Unternehmen vorgestellte Bücherverwaltung kann daher also nur ein Beispiel für den Zugriff auf den Amazon Associates Web Service sein.

Anfragen senden mit REST

Wenn man eine Anfrage mit REST versenden und das Antwort-XML-Dokument entgegennehmen möchte, braucht man nur wenige Zeilen Code. Ein einfacher Test sieht beispielsweise wie folgt aus:

http://ecs.amazonaws.de/onca/xml

?Service=AWSECommerceService

&AWSAccessKeyId=ABCDEFGHIJ0123456789

&Operation=ItemSearch

&SearchIndex=Books

&Title=Access

&Version=2008-08-19

Dieser Aufruf enthält zunächst die URL des Webservices und dahinter eine ganze Reihe Parameter. Der erste Parameter namens Service besitzt immer den Wert AWSECommerceService. Danach folgt die Access Key ID, die für jeden Benutzer eindeutig sein muss. Wenn Sie am Partnerprogramm von Amazon teilnehmen, sollten Sie auch diese in die URL einfließen lassen - auf diese Weise erhalten Sie im Falle eines Verkaufs die entsprechende Provision. Der passende Parameter lautet AssociateTag.

Operation gibt die gewünschte Aktion an, in diesem Falle mit ItemSearch die Suche nach einem Artikel. SearchIndex legt fest, nach welcher Art von Artikel der Service suchen soll. Hier sind die Bücher, also Books, das Ziel der Anfrage. Title markiert nur einen von mehreren möglichen Suchparametern und steht für den Titel eines Buchs. Unter Version geben Sie die Version des Amazon Associates Web Services an.

Eine REST-Anfrage können Sie bequem über den Webbrowser absetzen. Dieser liefert das Antwort-XML-Dokument als neue Seite zurück (s. Abb. 2).

pic002.tif

Abb. 3: Anlegen eines Verweises auf die Microsoft XML-Bibliothek

Neben den hier sichtbaren XML-Elementen folgen einige weitere mit den eigentlichen Informationen zu den gefundenen Artikeln.

Ergebnis beeinflussen mit Response Groups

Amazon liefert dabei die wichtigsten Informationen wie den Titel, den oder die Autoren oder den Hersteller, aber auch eine Reihe von Links zu verschiedenen produktbezogenen Seiten auf Amazon - nicht nur zur Produktseite selbst, sondern auch zu Seiten, auf denen Sie das Produkt zu Wunschlisten hinzufügen oder seine Bewertung durch andere Käufer einsehen können.

Diese Informationen können Sie erheblich erweitern. Dazu verwenden Sie den ResponseGroup-Parameter mit einer der unter [1] angegebenen Response-Groups.

Wenn die Produktliste beispielsweise Links zu den Produktbildern enthalten soll, fügen Sie folgenden Parameter zum REST-Aufruf hinzu:

&ResponseGroup=Images

Weitere Response Groups geben Sie durch Komma getrennt wie folgt an:

&ResponseGroup=Images,Reviews

Diese Variante würde nicht nur die Links zu Bildern, sondern auch noch die Bewertungstexte anderer Käufer zurückliefern. Weitere Parameter und ihre Bedeutung finden Sie unter obigem Link.

REST-Anfrage per VBA

Für den VBA-Entwickler ist es natürlich viel interessanter, eine REST-Abfrage per VBA abzusetzen und das Ergebnis in verarbeitbarer Form zurückzuerhalten. Die Amazon-Dokumentation liefert leider überwiegend Material für andere Programmiersprachen wie die .NET-Sprachen, PHP, Perl oder Java - Sprachen, denen man gegenüber VBA eine weit höhere Web-Affinität einräumt.

Die Routine aus Listing 1 zeigt beispielhaft, wie das Verwenden einer REST-Anfrage und die Auswertung der Antwort erfolgt. Dabei setzen die ersten Zeilen zunächst die URL mit den Parametern für die Anfrage zusammen. Hier kommen zunächst nur die oben angegebenen Parameter zum Einsatz, später kümmern wir uns um weitere Parameter wie etwa zusätzliche Suchkriterien.

Listing 1: Ein einfacher Amazon-Request

Public Sub AmazonRequest()

Dim objXML As MSXML2.DOMDocument

Dim strRequest As String

Dim strDeveloperToken As String

Dim strErrorCode As String

Dim strErrorDescription As String

Dim bolSuccess As Boolean

strDeveloperToken = cDeveloperToken

strRequest = "http://ecs.amazonaws.de/onca/xml”

strRequest = strRequest & "?Service=AWSECommerceService”

strRequest = strRequest & "&AWSAccessKeyId=” & strDeveloperToken

strRequest = strRequest & "&Operation=ItemSearch”

strRequest = strRequest & "&SearchIndex=Books”

strRequest = strRequest & "&Title=Access”

strRequest = strRequest & "&Version=2008-08-19”

Set objXML = New MSXML2.DOMDocument

With objXML

.async = False

.preserveWhiteSpace = False

.validateOnParse = True

.resolveExternals = False

End With

bolSuccess = objXML.Load(strRequest)

If bolSuccess = True Then

    On Error Resume Next

    strErrorCode = objXML. _

    selectSingleNode("ItemSearchResponse/OperationRequest/Errors/Error/Code”).Text

    If Err.Number = 0 Then

        strErrorDescription = objXML. _

        selectSingleNode("ItemSearchResponse/OperationRequest/Errors/Error/Message”).Text

        MsgBox strErrorDescription, vbOKOnly + vbCritical, strErrorCode

    Else

        Debug.Print objXML.XML

    End If

Else

    MsgBox "Error!” & vbCrLf & objXML.parseError.reason

End If

End Sub

Nach dem Erstellen des URL-Strings erzeugt die Routine ein DOMDocument-Objekt (MSXML-Bibliothek, Verweis siehe Abb. 3) und stellt einige Eigenschaften ein. Die Load-Methode dieses Objekts liefert beim Aufruf mit der Anfrage entweder den Wert True für eine erfolgreiche Anfrage oder den Wert False zurück. Letzterer Fall wird mit einer entsprechenden Meldung inklusive Fehlermeldung quittiert, dies sollte jedoch in der Regel nicht passieren. Eher kann es sein, dass ein fehlerhafter Aufruf ein valides XML-Dokument zurückliefert, das selbst die Fehlerbeschreibung enthält. Dies deckt die If...Then-Bedingung ab, welche prüft, ob beim Zugriff auf das Element, das üblicherweise Fehlerinformationen enthält (siehe markierter Bereich in Abb. 4), ein Fehler aufgetreten ist. Das Auslesen erfolgt dabei mithilfe eines XPath-Ausdrucks (XPath ist die Abfragesprache für XML-Dokumente). Die übergeordnete Errors-Auflistung ist nur in einer XML-Response enthalten, wenn der Aufruf fehlerhaft ist, sonst fällt sie komplett weg. Liefert das Dokument Fehlerinformationen, gibt ein Meldungsfenster die Informationen aus.

pic003.tif

Abb. 2: Ergebnis einer REST-Anfrage im Internet Explorer

pic004.tif

Abb. 4: Ein XML-Dokument mit einer Fehlermeldung weist meist auf eine fehlerhafte Anfrage hin.

Liegt kein Fehler vor, enthält dieser Teil des XML-Dokuments die Informationen über die gefundenen Produkte. Diese fallen meist wesentlich umfangreicher als Fehlerinformationen aus, dementsprechend haben wir auch deren Verarbeitung zunächst aus Listing 1 ausgeklammert und nur einen Kommentar platziert, der anzeigt, wo die Verarbeitung stattfindet.

Inhalt der XML-Antwort

Der wesentliche Teil einer fehlerlosen Antwort sieht etwa wie in Listing 2 aus und enthält die Items-Auflistung als Unterelement des Root-Elements ItemSearchResponse.

Listing 2: Aussehen der Beschreibung eines Buchs

...

<Items>

<Request>

<IsValid>True</IsValid>

<ItemSearchRequest>

<SearchIndex>Books</SearchIndex>

<Title>Access</Title>

</ItemSearchRequest>

</Request>

<TotalResults>1051</TotalResults>

<TotalPages>106</TotalPages>

<Item>

<ASIN>3827322650</ASIN>

<DetailPageURL>http://www.amazon.de/...</DetailPageURL>

<ItemLinks>

<ItemLink>

<Description>Add To Wishlist</Description>

<URL>http://www.amazon.de/...</URL>

</ItemLink>

... more <ItemLink>-Elements

</ItemLinks>

<ItemAttributes>

<Author>Andre Minhorst</Author>

<Creator Role="Autor">Andre Minhorst</Creator>

<Manufacturer>Addison-Wesley, München</Manufacturer>

<ProductGroup>Book</ProductGroup>

<Title>Das Access 2003-Entwicklerbuch</Title>

</ItemAttributes>

</Item>

... more <Item>-Elements

</Items>

...

Diese Auflistung wiederum besteht aus einigen allgemeinen Informationen wie der Wiederholung der in der REST-Anfrage gemachten Angaben sowie der Angabe der Anzahl der Ergebnisse und der Seiten, auf welche die Ergebnisse aufgeteilt sind.

Schließlich folgen einige Item-Elemente (standardmäßig sind es zehn Stück je Seite). Diese enthalten einen Link zur Detailseite bei Amazon, weitere Links zum Hinzufügen des Items zu den verschiedenen Listen und unter ItemAttributes die eigentlichen Eigenschaften des Item-Elements.

Im Rahmen der Bücherverwaltung aus Beitrag Bücherverwaltung (s. Shortlink 633) soll der WebService Bücher liefern, die einem oder mehreren Kriterien entsprechen. Dafür brauchen Sie eine spezielle Art der ItemSearch-Operation, die nur für Bücher funktioniert und die den Suchparameter Search erwartet. Diesen füllt man wiederum mit einem Ausdruck, der die gewünschten Suchkriterien enthält. Ausgiebige Informationen zu diesem Parameter liefert [2].

Zu Beispielzwecken beschränken wir uns hier auf die folgenden Kriterien:

  • ASIN: amazonweit eindeutige Produktnummer, entspricht bei Büchern der ISBN-Nummer
  • author: Autor des Buchs
  • keywords: Im Titel oder in der Beschreibung eines Buchs vorkommende Wörter
  • pubdate: Veröffentlichungsdatum
  • title: Im Titel vorkommende Wörter

Sowohl die einzelnen Kriterien als auch die für ein Kriterium angegebenen Schlüsselbegriffe können durch and und or verknüpft werden; auch der Einsatz von Klammern ist möglich. Wichtig ist, dass eventuell auftretende Leerzeichen durch den Ausdruck %20 ersetzt werden. Dies entspricht dem hexadezimalen Wert für 32, dem ASCII-Wert des Leerzeichens.

Mehrere Ergebnisseiten

Die Anzahl der Bücher überschreitet gelegentlich die in einem Zug vom Webservice zurückgelieferten zehn Bücher. In diesem Fall muss man den gleichen Aufruf mehrere Male durchführen, um Informationen zu allen Büchern zu erhalten - mit einer kleinen Ausnahme: Der Aufruf soll jeweils die nächsten zehn Bücher zurückliefern.

Dies erledigt der Parameter ItemPage, den man per VBA auf die jeweilige Seite einstellt:

strRequest = strRequest & "&ItemPage=" & intPage

Wie viele Seiten und wie viele Einträge es gibt, erfährt man aus zwei Elementen, die sich unterhalb des Items-Knotens befinden und etwa wie folgt aussehen:

<TotalResults>12</TotalResults>

<TotalPages>2</TotalPages>

Um alle, auch über mehrere Seiten verteilte Bücher einzulesen, braucht man also nur eine Schleife von 2 (den ersten Aufruf braucht man, um überhaupt die Seitenzahl zu erfahren) bis zur Anzahl der Seiten laufen zu lassen und die enthaltenen Einträge zu verarbeiten.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Bücherverwaltung

eBay-Artikel einstellen mit Access

Google Earth ferngesteuert, Teil II

Globale Suche

Automatischer Up- und Download per FTP

Performanter Webzugriff auf MySQL-Datenbanken

Dynamische Ribbons

Google per Web-Service abfragen

Suchfunktionen von einfach bis komplex

eBay-Artikelsuche mit Access

Fehlertolerantes Suchen

Auswahlfelder im Ribbon

Suchformularassistent

Twittern mit Access

Datenbank goes Internet mit Dreamweaver Ultradev

Tipps und Tricks

Datenzugriffsseiten mit Access 2000

© 2003-2015 André Minhorst Alle Rechte vorbehalten.