Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Amazon.com Web Services 2.0

Geschrieben von: Christoph Wille
Kategorie: Web Services

This printed page brought to you by AlphaSierraPapa

Die Landschaft der verfügbaren Web Services wird langsam bunter - neben den Google Web APIs hat auch ein weiterer "Großer" des Internets Web Services für uns Programmierer im Angebot - Amazon.com. Im heutigen Artikel werden wir uns mit der Suche nach Büchern beschäftigen, der gezeigte Code ist leicht auf andere Angebote Amazons umlegbar.

Generell unterstützen die Amazon.com Web Services zwei große Bereiche: das Anzeigen von Produkten, sowie das Verwalten von Shopping Carts. Bevor man die Services verwenden kann, muß man sich unter http://www.amazon.com/webservices registrieren, und sollte auch das entsprechende Developer Kit downloaden:

Im Developer Kit mit dabei ist die leider etwas schwachbrüstige Dokumentation. Viele Dinge muß man sich mit Hilfe des VS.NET Class Browsers beziehungsweise der Java Samples zusammensuchen - es steht zu hoffen, daß in Zukunft diese Schwachstellen beseitigt werden.

Erstellen der Proxyklassen

Obwohl Visual Studio.NET das Erstellen von Web Service Proxies hervorragend beherrscht, ist es von Zeit zu Zeit nicht schlecht, mit den Tools des .NET SDK's zu üben - denn die Kommandozeilenclients des SDK's können oft mehr als die Wizards des VS.NET. Hier ist die Befehlszeile zur Generierung eines C# Proxy's:

wsdl /language:C# /namespace:Amazon.WebServices /protocol:SOAP /out:amazonws.cs 
     http://soap.amazon.com/schemas2/AmazonWebServices.wsdl

Damit erhalten wir den Proxy in die Datei amazonws.cs generiert, und diese Datei können wir ab sofort in alle unsere Projekte einbinden.

Eine Applikation zur Buchsuche

Zur Demonstration wie die Amazon.com Web Services funktionieren, erstellen wir uns eine Applikation mit der man nach Büchern suchen kann, und zwar mittels Schlüsselwort. Die gefundenen Resultate sollen in einer ListView ausgegeben werden:

Die ListView besitzt drei Spalten - der Grund hierfür ist, daß wir bei unserer Suchanfrage nur vier Werte immer erhalten werden:

Falls verfügbar, bekommen wir auch folgende Werte geliefert:

Daher habe ich mich für diese kleine Applikation auf die sichere Seite begeben, und stelle nur das dar, was mir auch immer sicher vom Web Service zur Verfügung gestellt wird. Die einzigen optionalen Daten die die Applikation verwendet ist ImageUrlMedium, um den Cover des Buches nachzuladen, so er verfügbar ist (wird in der PictureBox unterhalb der ListView dargestellt).

Beginnen wir aber mit dem Code, der hinter dem Suchen-Button liegt:

    private void btnSearch_Click(object sender, System.EventArgs e)
    {
      AmazonSearchService searchService = new AmazonSearchService();

      KeywordRequest keywordReq = new KeywordRequest();
      keywordReq.devtag = txtToken.Text;      // Token
      keywordReq.keyword = txtKeyword.Text;   // Suchbegriff
      keywordReq.type = "lite";               // Suchart
      keywordReq.sort = "+salesrank";         // Art der Sortierung
      keywordReq.mode = "books";              // Suchbereich
      keywordReq.tag = "alphasierrapapa";     // Amazon Associate ID

      ProductInfo pi = searchService.KeywordSearchRequest(keywordReq);

      lvFoundItems.BeginUpdate();
      lvFoundItems.Items.Clear();
	  
      // Anzahl der Records - kann man mit der KeywordRequest.page Eigenschaft
      // zum Pagen durch die Resultate verwenden
      labelTotalRecords.Text = "Total records: " + pi.TotalResults.ToString();

      for (int i=0;i < pi.Details.Length; i++)
      {
        ListViewItem lvi = new ListViewItem();
        lvi.Text = pi.Details[i].Url;
        lvi.SubItems.Add(pi.Details[i].Asin);
        lvi.SubItems.Add(pi.Details[i].ProductName);
        lvi.SubItems.Add(pi.Details[i].ImageUrlMedium);
        lvFoundItems.Items.Add(lvi);
      }

      lvFoundItems.EndUpdate();
    }

Alle Suchanfragen werden via AmazonSearchService abgewickelt, die Variation dabei ist die Methode (hier KeywordSearchRequest) sowie das zugehörige Suchrequest-Objekt (in diesem Beispiel KeywordRequest). Die Datenfelder sind in allen Fällen einfache Strings, die Resultate werden im ProductInfo.Details Array geliefert.

Wie man sieht, ist die Suche und das Darstellen der Resultate kein Problem. Um der ganzen Applikation etwas mehr "Coolness" zu verleihen, wollen wir noch das Bild des Covers darstellen, wie im folgenden Screenshot gezeigt:

Dazu müssen wir das ItemActivate Event behandeln. In diesem laden wir mit Hilfe der WebRequest und WebResponse Klassen das Bild vom Internet, und stellen es dann in der PictureBox dar - dank Streams im .NET Framework kein großes Problem wie der folgende Sourcecode zeigt:

    private void lvFoundItems_ItemActivate(object sender, System.EventArgs e)
    {
      if (lvFoundItems.SelectedItems.Count == 0) return;
      ListViewItem lvi = lvFoundItems.SelectedItems[0];
      string strImageUrl = lvi.SubItems[3].Text;
      if ("" == strImageUrl) return;

      WebRequest wrq = WebRequest.Create(strImageUrl);
      WebResponse wrp = wrq.GetResponse();

      Bitmap bmp = new Bitmap(wrp.GetResponseStream());
      picbox.Image = bmp;
      picbox.Refresh();
    }

Bei einer Webapplikation kann man direkt ein Image-Tag bauen, wodurch das Bild dann vom Client nachgeladen wird. Aber selbst programmiert macht es doch mehr Spaß, oder?

Schlußbemerkung

Die Amazon.com Web Services sind ein weiterer Web Service den man sinnvoll in seine eigene Web oder Windows Anwendung einbauen kann - angefangen von einer einfachen Buchsuche wie heute vorgestellt, bis hin zu komplexen Anwendungen, zB der automatisierte Einkauf von Büchern über eine Intranet-Verwaltungsapplikation.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20021029.zip

Verwandte Artikel

Programmieren mit den Google Web APIs Beta 2
http:/www.aspheute.com/artikel/20020415.htm
Scrapen von Webseiten
http:/www.aspheute.com/artikel/20000824.htm
Web Services einfach konsumieren
http:/www.aspheute.com/artikel/20010703.htm
Web Services in Anwendungen konsumieren
http:/www.aspheute.com/artikel/20010622.htm

Links zu anderen Sites

Amazon.com Web Services
http://www.amazon.com/webservices

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.