Como obter uma lista de categorias sem ofertas soltas com o Wrapper.Net

Vamos utilizar o FindCategoryList e filtrar apenas as categorias que possuam produtos, sem ofertas soltas.

Antes de iniciar o tutorial, 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.

Primeiro vamos entender a ideia de ofertas soltas. Quando realizamos a requisição para o serviço FindCategoryList, podemos ter como retorno categorias somente com ofertas, sem o relacionamento com produtos, o que chamamos de ofertas soltas. No XML de retorno do serviço, temos o atributo hasOffer para cada categoria retornada. Esse atributo indica qual a categoria possui produtos (quando seu valor é “false”) e qual possui somente ofertas soltas (quando seu valor é “true”).

Com a classe Apiki_Buscapé_API instanciada, vamos recuperar uma lista de categorias com a palavra-chave “puma”.

<br />Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d");<br />string result = apiBuscape.FindCategoryList(null, "puma", string.Empty);<br />

Para poder tratar o XML de retorno, vamos transformar a string de retorno em um objeto do tipo XmlDocument como já vimos em tutoriais anteriores.

<br />System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();<br />xmldoc.LoadXml(result);<br />// Cria objeto com todos os nós subCategory<br />System.Xml.XmlNodeList categories = xmldoc.GetElementsByTagName("subCategory");<br />

No trecho de código acima, também já separamos todos os nós subCategory. Agora temos que percorrê-los, a fim de exibir somente as categorias sem ofertas soltas.

foreach (System.Xml.XmlNode cat in categories)
        	{
            	// Exibir somente as categorias sem ofertas soltas
            	if (cat.Attributes.GetNamedItem("hasOffer").InnerText == "false")
            	{
                	// Dados da categoria
                	string imageUrl = cat.ChildNodes.Item(0).Attributes.GetNamedItem("url").InnerText;
                	string catName = cat.ChildNodes.Item(2).InnerText;
                	string linkUrl = cat.ChildNodes.Item(1).ChildNodes.Item(0).Attributes.GetNamedItem("url").InnerText;
                	int catId = Convert.ToInt32(cat.Attributes.GetNamedItem("id").InnerText);
            	}
        	}

Verificamos em cada nó o valor do atributo hasOffer e exibimos somente os itens em que o atributo tem o valor false.

Já que vamos exibir essas informações no navegador, vamos aproveitar e buscar também a quantidade de produtos presente em cada categoria. Para isso, vamos utilizar o método FindProductList buscando pelo id da categoria e pegando o valor do atributo totalResultsAvailable que é retornado. A seguir, exibimos o nome da categoria e sua imagem com a quantidade de produtos encontrados.

// Quantidade de produtos na categoria
                	Apiki_Buscape_API.FiltrosFindProducts filtrosProdutos = new Apiki_Buscape_API.FiltrosFindProducts();
                	filtrosProdutos.CategoryId = catId;
                	filtrosProdutos.Results = 1;
                	string products = apiBuscape.FindProductList(filtrosProdutos);
                	System.Xml.XmlDocument docProducts = new System.Xml.XmlDocument();
                	docProducts.LoadXml(products);
                	int productsCount = Convert.ToInt32(docProducts.ChildNodes.Item(1).Attributes.GetNamedItem("totalResultsAvailable").InnerText);

                	Response.Write( string.Format( "<p><a href=\"{0}\"><img src=\"{1}\" />{2} - {3} ({4})</a></p>", linkUrl, imageUrl, catId, catName, productsCount) );

Pronto! Temos a exibição somente das categorias que não possuem ofertas soltas e na frente colocamos a quantidade de produtos encontrados para a categoria. Continuem acompanhando nossos tutoriais toda semana e comentem em nosso fórum de discussões.

Deixe uma resposta

Topo