ASP.NET 2.0 - Usando o web service da Amazon.com


Não custa nada começar com uma definição de web service dada pela Wikipédia: :

"Web service é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes. Com esta tecnologia é possível que novas aplicações possam interagir com aquelas que já existem e que sistemas desenvolvidos em plataformas diferentes sejam compatíveis. Os Web services são componentes que permitem às aplicações enviar e receber dados em formato XML. Cada aplicação pode ter a sua própria "linguagem", que é traduzida para uma linguagem universal, o formato XML.

Para as empresas, os Web services podem trazer agilidade para os processos e eficiência na comunicação entre cadeias de produção ou de logística. Toda e qualquer comunicação entre sistemas passa a ser dinâmica e principalmente segura, pois não há intervenção humana."

Se você quer saber como criar web services na plataforma .NET leia meus artigos sobre o assunto:

Neste artigo eu vou mostrar como você pode usar um web service que foi criado e disponibilizado pela Amazon.com.

Para poder usar um web service da Amazon você tem que se registrar como um usuário e usar sua chave de acesso de identificação - ID - para poder efetuar requisições usando o web service.

Acesse o site www.amazon.com/gp/aws/landing.html e efetue o seu registro, ao final você a tela abaixo informando que o seu registro foi efetuado com sucesso. Você deverá receber um identificador de chave de acesso no seu email.

Após efetuar o registro você pode continuar com o projeto incluindo uma referência a um web service para poder usar o serviço.

Vou usar o Visual Web Developer(VWD) para criar uma aplicação ASP.NET bem simples onde você irá obter informações sobre livros do site da Amazon.com.

Abra o VWD e no menu File selecione a opção New Web Site. Será criado um projeto web contendo uma página chamada default.aspx.

- Clique com botão direito do mouse sobre o nome do projeto e selecione a opção - Add Web Reference;

- Na janela Add Web Reference, informe a URL - http://webservices.amazom.com/AWSECommerceService/AWSECommerceService.wsdl e clique no botão Go:

Se o documento WSDL for encontrado e recebido com sucesso, você poderá incluí-lo no seu projeto clicando no botão -Add Reference - ver figura abaixo-  vou usar o nome padrão com.amazon.webservices.

Ao final, se você olhar na janela Solution Explorer deverá visualizar a referência incluída:

Com isto já temos a referência ao web service da Amazon incluída no nosso projeto e pronta para ser usada.

Nota: Veja a documentação atualizada dos webservices da Amazon.com no link : http://developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=19

Selecione a página default.aspx na janela Solution Explorer e no modo Design inclua, a partir da ToolBox,  os componentes: ListBox, Button, TextBox e Label conforme leiaute abaixo:

Vamos ao código do projeto:

Você deve declarar o seguinte namespace no seu projeto:

Imports com.amazon.webservices

A seguir vamos declarar as seguintes variáveis objeto que serão usadas no projeto:

Dim aws As New AWSECommerceService
Dim
requisicao As New ItemSearchRequest

Finalmente no evento Click do botão de comando inclua o seguinte código :

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click


requisicao.SearchIndex =
"Books"

requisicao.Power = "title:" + TextBox1.Text

requisicao.ResponseGroup = New String() {"Small"}

requisicao.Sort = "salesrank"


Dim
requisicoes As ItemSearchRequest() = New ItemSearchRequest() {requisicao}

Dim procurarItem As ItemSearch = New ItemSearch


procurarItem.AWSAccessKeyId =
"inclua aqui o seu ID"

procurarItem.Request = requisicoes


Try

   Dim resposta As ItemSearchResponse = aws.ItemSearch(procurarItem)

   Dim info As Items = resposta.Items(0)

   Dim items As Item() = info.Item
 

   ListBox1.Items.Clear()


   Dim
i As Integer = 0


   While
i < items.Length

          Dim item As Item = items(i)

          ListBox1.Items.Add("Título: " + item.ItemAttributes.Title)

          System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)

   End While

Catch ex As Exception

   ListBox1.Text = (ex.ToString)

End Try

End Sub

Como funciona ?

Primeiro criamos uma instância do serviço e do tipo de busca que desejamos realizar através das seguintes declarações:

Dim aws As New AWSECommerceService
Dim
requisicao As New ItemSearchRequest

Preenchemos o nosso objeto requisicao com os detalhes dos tipos de produtos que queremos obter:

requisicao.SearchIndex = "Books"

requisicao.Power = "title:" + TextBox1.Text

requisicao.ResponseGroup = New String() {"Small"}

requisicao.Sort = "salesrank"

 

- SearchIndex define um catálogo específico que vamos procurar.
- Power é um parâmetro que permite realizar consultas complexas para livros usando o formato key:value.
onde key pode incluir: 
asin, author, author-exact, author-begins, keywords, keywords-begin, language, publisher, subject, subject-words-begin, subject-begins, title, title-words-begin, and title-begins.

 

No nosso exemplo - "title:" + TextBox1.Text -  iremos retornar o título do livro cujo conteúdo coincida com o critério informado e usado para criar as palavras-chaves. Poderíamos ter usado outra chave como "author:" ou efetuar uma combinação para criar consultas mais complexas.

 

O parâmetro Power somente pode ser usado quando SearchIndex for definido como books.

 

Poderíamos ter usado a seguinte definição de busca para retornar todos os livros: requesicao.Keywords = TextBox1.Text

 

- ResponseGroup permite refinar o resultado de nossa busca para conter somente a informação que desejamos. Assim :

  Small pode ser usado para incluir todos os dados necessários para exibir um item típico na lista de resultados (nome do produto, autor, etc.)

 

Nota: Para detalhes veja o documento em : http://docs.amazonwebservices.com/AWSEcommerceService/2006-11-14/

 

- Sort define como será ordenada a lista de retorno da busca; "salesrank" irá apresentar os títulos dos livros por ordem de vendas.

 

Após toda esta definição incluímos o nosso objeto requisicao em array de requisição. Usando esta estrutura fica mais fácil tratar com requisições diversas:

 

Dim requisicoes As ItemSearchRequest() = New ItemSearchRequest() {requisicao}

 

O passo seguinte é criar um objeto ItemSearch que encapsulará nossa requisição de busca e os detalhes de nosso registro feito na Amazon.com.(Na propriedade AWSAccessKeyId deverá ser preenchida com o seu ID obtido na Amazon.)

 

Dim procuraItem As ItemSearch = New ItemSearch

procuraItem.AWSAccessKeyId = "XXXXXXXXXXXXXXXXX"

procuraItem.Request = requisicoes

 

Finalmente podemos executar nossa requisição usando o serviço instanciado aws. O resultado da consulta será armazenado no objeto ItemSearhResponse onde o produto estará disponível através do objeto Item.

Dim response As ItemSearchResponse = aws.ItemSearch(procuraItem)

Como estamos enviando apenas uma requisição o nosso resultado estará armazenado no primeiro item da coleção :

Dim info As Items = response.Items(0)

Dim items As Item() = info.Item

Percorrendo a coleção items pode obter os valores específicos do nosso resultado através da propriedade ItemAttributes de um item. O nosso exemplo exibe o título do livro no controle ListBox.

  While i < items.Length

       Dim item As Item = items(i)

       ListBox1.Items.Add("Título: " + item.ItemAttributes.Title)

       System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)

   End While

O resultado obtido após a execução do projeto pode ser visto na figura a seguir:

Eu mostrei o "caminho feliz" de como você pode usar um web service pronto , no caso o web service da Amazon. Para incrementar o projeto e torná-lo mais funcional consulte a documentação no site da Amazon e use seu talento...

Pegue o projeto completo aqui: wsAmazon.zip

Até o próximo artigo ASP.NET....


José Carlos Macoratti