Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Exibindo as informações dos produtos utilizando o Wra

Recommended Posts

Nesse artigo vamos tratar o retorno do método FindProductList para exibição em uma aplicação. Antes de iniciar, faça o download dos arquivos do Wrapper .Net diretamente do nosso perfil no GitHub. Com os arquivos em mãos, adicione-os ao projeto no Visual Studio ou, se preferir, façam uma referência à .dll que também está disponível para download.

Como todos sabem, a API do Buscapé, bem como seu Wrapper em .Net, por padrão, envia como retorno às requisições um XML. Pórem, para desenvolver qualquer aplicação utilizando a API, ou um de seus wrappers, precisamos fazer o ?parse? desse XML, extraindo as informações que a aplicação necessita.

Vamos utilizar o XML de retorno do método FindProductList para exemplificar como exibir em uma aplicação uma listagem com os produtos retornados pelo método. Para conhecer mais sobre o método FindProductList do Wrapper .Net, consulte nossos artigos sobre o tema:

Vamos, então, invocar o método FindProductList e armazenar o XML de retorno em uma string:

Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d");

Apiki_Buscape_API.FiltrosFindProducts filtrosProdutos = new FiltrosFindProducts();

filtrosProdutos.CategoryId = 6424;

filtrosProdutos.Results = 5;

string result = apiBuscape.FindProductList(filtrosProdutos);

 

Response.Write(result);

Na linha 7 do código, temos a instrução para exibir no navegador a variável result que contém o XML de retorno do método. Prestem bastante atenção na estrutura do XML, pois precisamos entendê-la bem para conseguir extrair o que precisamos.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Result xmlns="urn:buscape" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" match="all" page="1" totalPages="867" totalResultsReturned="5" totalResultsAvailable="4334" xsi:schemaLocation="http://developer.buscape.com/admin/buscape.xsd">

<details>

<applicationID>564771466d477a4458664d3d</applicationID>

<applicationVersion>1.0.0.0</applicationVersion>

<applicationPath>http://bws-apps.buscape.com/mobile/update</applicationPath>

<date>2012-01-03T10:04:47.540-02:00</date>

<elapsedTime>3</elapsedTime>

 

<status>success</status>

<code>0</code>

<message>success</message>

</details>

<category hasOffer="false" isFinal="true" parentCategoryId="2" id="6424">

<thumbnail url="http://imagem.buscape.com.br/bp5/categorias/6424.jpg"/>

<links>

 

<link type="category" url="http://compare.buscape.com.br/notebook.html?mdapp=100&mddtn=69672797"/>

<link type="xml" url="http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=6424"/>

</links>

<name>Notebook</name>

<filters></filters>

</category>

<product quantity="0" id="349482" eco="false" hasMetaSearch="false" categoryId="6424" totalSellers="1" fullDescription="false">

<productName>Dell Inspiron 14 Intel Core i3-2330M 2.2 GHz 4096 MB 500 GB</productName>

<productShortName>Notebook Dell Inspiron 14</productShortName>

Vejam que o XML tem os nós pai, details, que contém os detalhes da requisição efetuada; category, que contém os detalhes da categoria dos produtos; e vários nós product, com os detalhes dos produtos retornados. Nesse artigo vamos nos ater aos nós product, pois são eles que vamos tratar e exibir em nossa aplicação.

<product quantity="0" id="349482" eco="false" hasMetaSearch="false" categoryId="6424" totalSellers="1" fullDescription="false">

<productName>Dell Inspiron 14 Intel Core i3-2330M 2.2 GHz 4096 MB 500 GB</productName>

<productShortName>Notebook Dell Inspiron 14</productShortName>

<currency abbreviation="BRL"/>

<priceMin>1499.00</priceMin>

<priceMax>1499.00</priceMax>

 

<links>

<link type="product" url="http://compare.buscape.com.br/dell-inspiron-14-intel-core-i3-2330m-2-2-ghz-4096-mb-500-gb.html?mdapp=100&mddtn=69672797"/>

<link type="specification" url="http://compare.buscape.com.br/prod_ficha?idu=349482"/>

<link type="xml" url="http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?productId=349482"/>

</links>

<thumbnail url="http://imagem.buscape.com.br/thumbs/ensopado/6424/200x200_349482_1.jpg"/>

<rating>

<userAverageRating>

<numComments>5</numComments>

 

<rating>9.6</rating>

<links>

<link type="xml" url="http://sandbox.buscape.com/service/viewUserRatings/564771466d477a4458664d3d/br/?productId=349482"/>

</links>

</userAverageRating>

</rating>

<specification>

<links>

 

<link type="xml"

Dentro de um nó product temos vários outros nós, que chamaremos de elementos, e os atributos do nó. O que vamos fazer aqui é exibir os dados de cada elemento de product. Para isso, vamos utilizar os métodos de três classes do .Net: XmlDocument, um objeto DOM que representa um documento XML; XmlNodeList, que representa uma coleção de nós ou elementos de um XML e XmlNode, que representa um único nó de um XML. Porém, é bom ter em mente que mesmo esse único nó pode conter outros nós filhos e vários atributos.

Então, a primeira coisa que faremos será instanciar um objeto da classe XmlDocument e utilizar o seu método LoadXml para carregar o XML. A seguir, vamos separar todos os nós product em um objeto da classe XmlNodeList e vamos percorrer nossa coleção de produtos.

// Realiza a leitura do XML a partir do retorno do método FindProductList

System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();

xmldoc.LoadXml(result);

 

// Recupera somente os nós de produtos

System.Xml.XmlNodeList products = xmldoc.GetElementsByTagName("product");

foreach (System.Xml.XmlNode item in products)

{

// Percorre a coleção de produtos

}

Dentro do foreach implementado, trataremos com um nó produto de cada vez. Dessa forma, o que temos que fazer é percorrer todos os elementos do nó produto, recuperando seu valor e exibindo no navegador.

// Dentro de cada nó de produto é necessário recuperar todos os nós filhos

System.Xml.XmlNodeList productElements = item.ChildNodes;

foreach (System.Xml.XmlNode element in productElements)

{

// Dentro de cada nó filho de produto tratamos de acordo com a necessidade

switch (element.Name)

{

// Cada caso é um caso...

}

}

Cada elemento de produto tem uma estrutura específica, por esse motivo devemos mapear todos os elementos que queremos exibir e efetuar a lógica necessária em cada elemento para recuperar seu valor e exibi-lo.

case "productName" :

case "productShortName" :

case "priceMin" :

case "priceMax" :

// Para elementos sem nós filhos apenas escrevemos o nome do elemento e seu conteúdo

Response.Write(element.Name + ": " + element.InnerText + "<br />");

break;

 

case "rating" :

// Para o elemento rating devemos pegar o nó rating dentro do nó userAverageRating

System.Xml.XmlNode rating = element.FirstChild.ChildNodes.Item(1); // 1 é o índice do nó rating dentro de seu nó pai userAverageRating

Response.Write(element.Name + ": " + rating.InnerText + "<br />");

break;

 

case "specification" :

// Dentro do nó specification temos vários nós item, dentro de cada nó item podemos ter um ou mais nós com o valor da especificação

Response.Write(element.Name + ": <ul>");

System.Xml.XmlNodeList specItens = element.ChildNodes;

foreach (System.Xml.XmlNode spec in specItens)

{

if (spec.Name == "item")

{

Response.Write("<li>"+spec.Attributes.GetNamedItem("label").InnerText + ": <ul>");

System.Xml.XmlNodeList values = spec.ChildNodes;

foreach (System.Xml.XmlNode val in values)

Utilzamos o método Response.Write() para exibir no navegador os dados que recuperamos do XML retornado pelo método FindProductList. Podemos tratar esses dados de muitas outras formas, armazená-los em variáveis, ou até mesmo ter uma estrutura de classes em nosso projeto para armazenar essas informações de produtos, variando de acordo com a necessidade de cada aplicativo.

Para não facilitar a visualização e não ficar nenhum código perdido, aqui embaixo está o código completo do nosso artigo de hoje.

protected void Page_Load(object sender, EventArgs e)

{

// Instância as classes do Wrapper

Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d");

Apiki_Buscape_API.FiltrosFindProducts filtrosProdutos = new FiltrosFindProducts();

 

// Configura os filtros do método e obtém o XML de retorno

filtrosProdutos.CategoryId = 6424;

filtrosProdutos.Results = 5;

string result = apiBuscape.FindProductList(filtrosProdutos);

 

// Realiza a leitura do XML a partir do retorno do método FindProductList

System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();

xmldoc.LoadXml(result);

 

// Recupera somente os nós de produtos

System.Xml.XmlNodeList products = xmldoc.GetElementsByTagName("product");

foreach (System.Xml.XmlNode item in products)

{

string productImage = string.Empty, productUrl = string.Empty;

 

// Dentro de cada nó de produto é necessário recuperar todos os nós filhos

System.Xml.XmlNodeList productElements = item.ChildNodes;

foreach (System.Xml.XmlNode element in productElements)

{

 

http://imasters.com.br/artigo/23714/apis-buscape/exibindo-as-informacoes-dos-produtos-utilizando-o-wrapper-net

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.