Tuesday, April 29, 2008

Amazon Web Services

. Tuesday, April 29, 2008

Amazon Web Services (AWS) è un insieme di servizi web che possono essere consultati tramite delle API, permettendo di avere accesso all'infrastruttura di Amazon.
Per poter utilizzare i vari servizi è necessario registrarsi:
amazon1Al termine della registrazione ci viene fornito un codice identificativo da includere nella richiesta web.
A questo punto è possibile scaricare l'SDK.



La solution è composta da due progetti scritti in C#:
Amazon.ECS: la libreria principale,
Amazon.ECS.Samples: contiene una serie di esempi d'uso.
Una volta compilato il progetto, aprendo la solution con Visual Studio 2005 (personalmente non ho trovato nessun problema nel compilare anche con Visual Studio 2008), si può referenziare la dll prodotta nel nostro progetto.
Nel semplice esempio mostro come è possibile con poche righe di codice effettuare una ricerca:

   1: Amazon.ECS.Query.AmazonECSQuery service = 
   2:        new Amazon.ECS.Query.AmazonECSQuery( "codice identificativo", "");
   3: Amazon.ECS.Model.ItemSearchRequest itemRequest = new Amazon.ECS.Model.ItemSearchRequest();
   4: itemRequest.SearchIndex = "Books";
   5: itemRequest.Keywords = "Asp.Net 2.0";
   6: itemRequest.ResponseGroup = new System.Collections.Generic.List<string>(new string[] { "Large", "Images"});
   7: Amazon.ECS.Model.ItemSearchResponse response = service.ItemSearch(itemRequest);
   8: DataTable dtBooks = new DataTable();
   9: dtBooks.Columns.Add( new DataColumn( "Title", typeof( string)));
  10: dtBooks.Columns.Add( new DataColumn( "Author", typeof( string)));
  11: dtBooks.Columns.Add( new DataColumn( "Image", typeof( string)));
  12: dtBooks.Columns.Add( new DataColumn( "Price", typeof( string)));
  13: DataRow row;
  14: foreach (Amazon.ECS.Model.Items items in response.Items)
  15: {    
  16:   foreach( Amazon.ECS.Model.Item item in items.Item)
  17:   {
  18:     row = dtBooks.NewRow();
  19:     row["Title"] = item.ItemAttributes.Title;
  20:                     
  21:     if (item.IsSetLargeImage())
  22:     {
  23:       row["Image"] = item.LargeImage.URL;
  24:       //Per la small
  25:       //item.SmallImage.URL
  26:     }
  27:     if (item.ItemAttributes.IsSetListPrice())
  28:       row["Price"] = item.ItemAttributes.ListPrice.FormattedPrice;
  29:     if (item.ItemAttributes.IsSetAuthor())
  30:       foreach (string author in item.ItemAttributes.Author)
  31:         row["Author"] += author;
  32:     dtBooks.Rows.Add(row);
  33:   }
  34: }
  35:  
  36:GridView1.DataSource = dtBooks;
  37:GridView1.DataBind();

Nello specifico vado ad effettuare una ricerca nella categoria Books tramite una chiave di ricerca Asp.Net 2.0,  ma come si può notare il codice è estremamente semplice.
Ci sono diverse categorie consultabili per esempio: DVD, Electronics, Music, VideoGames e tantissimo altro.
Inoltre recupero solo una piccolissima parte delle innumerevoli informazioni disponibili (interagendo con la lista ResponseGroup): il titolo, l'autore, il prezzo e l'immagine dei libri che soddisfano il criterio di ricerca.
La ricerca restituisce i primi dieci elementi che costituiscono la prima pagina, ma è possibile modificare gli items di ritorno impostando la property Count con un valore da 1 a 25, oltre ad indicare la pagina di ritorno tramite la property ItemPage:


   1: itemRequest.Count = 25;


Per completezza indico anche il codice di markup del GridView:

   1: <asp:GridView
   2:  ID="GridView1" runat="server" AutoGenerateColumns="False" 
   3:  BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" 
   4:  CellPadding="4" ForeColor="Black" GridLines="Horizontal">
   5:  <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
   6:  <Columns>

   7:    <asp:BoundField DataField="Title" HeaderText="Titolo"/>
   8:    <asp:BoundField DataField="Author" HeaderText="Autore"/>
   9:    <asp:BoundField DataField="Price" HeaderText="Prezzo"/>
  10:    <asp:ImageField DataImageUrlField="Image">
  11:      <ControlStyle Width="100px" />    
  12:    </asp:ImageField>
  13:  </Columns>

  14:  <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
  15:  <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
  16:  <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
  17: </asp:GridView>

Risultato finale:
amazon2

0 commenti:

Post a Comment