Dev (Back & Front)ARTIGO

Filtrando produtos por suas características com o Wrapper .Net

Vejam nesse artigo como refinar a busca por produtos através das especificações de cada um, utilizando o método FindProductList. 

Antes de iniciar a leitura, é aconselhável que faça o download dos arquivos do Wrapper .Net diretamente do nosso perfil no GitHub. Com os arquivos em mãos, adicione-os ao seu projeto no Visual Studio, ou se preferir, faça uma referência à .dll, que também está disponível para download.

O serviço Find Product List, da API do Buscapé, nos permite filtrar os resultados por diversos parâmetros e de acordo com a categoria de produtos que tentamos buscar. A partir da nova versão do Wrapper .Net, conseguimos utilizar esses filtros através da classe SpecIds.

Inicialmente, vamos instanciar um objeto da classe Apiki_Buscapé_API informando nosso AplicationId:

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

Para utilizar os filtros adicionais do método, precisamos instanciar também um objeto do tipo FiltrosFindProducts:

Apiki_Buscape_API.FiltrosFindProducts filtrosProdutos = new FiltrosFindProducts();

Para saber qual filtro poderemos usar em nossas buscas, precisamos primeiro obter uma lista de produtos e procurar no XML de retorno pelo nó filters. Cada categoria de produtos disponibilizará opções de filtros diferentes. Vejam, no exemplo abaixo, uma chamada do método FindProductList para a categoria 77 (celular) e outra para a categoria 93 (câmera digital) e seu respectivo xml de retorno:

filtrosProdutos.CategoryId = 77;
string result = apiBuscape.FindProductList(filtrosProdutos);


<filters>
<filter name="Marca" id="1117">
<value value="Nokia" id="6326"/>
<value value="LG" id="6328"/>
<value value="Samsung" id="6327"/>
<value value="Motorola" id="6325"/>
<value value="Sony Ericsson" id="115882"/>
<value value="BlackBerry" id="64298"/>
<value value="Vaic" id="180386"/>
<value value="HTC" id="109150"/>
<value value="Foston" id="122244"/>
<value value="Apple" id="128840"/>
</filter>
<filter name="Operadora" id="1135">
<value value="Desbloqueado" id="50873"/>
<value value="Vivo" id="6444"/>
<value value="Claro" id="6441"/>
<value value="Tim" id="6443"/>
<value value="Oi" id="6442"/>
</filter>
<filter name="Tecnologia" id="1138">
<value value="GSM" id="6446"/>
<value value="Iden" id="48615"/>
<value value="CDMA" id="6448"/>
</filter>
<filter name="Quantidade de Chips" id="5275">
<value value="1" id="338254"/>
<value value="2" id="338255"/>
<value value="3" id="338256"/>
<value value="4" id="339077"/>
</filter>
<filter name="Câmera" id="1176">
<value value="2.0" id="57678"/>
<value value="1.3" id="58908"/>
<value value="0.3" id="51132"/>
<value value="5.0" id="109055"/>
<value value="Não" id="6516"/>
</filter>
<filter name="Funções Extras" id="3348">
<value value="MP3 Player" id="96402"/>
<value value="Reproduz Vídeo" id="209881"/>
<value value="Java" id="96407"/>
<value value="Gravador de Vídeo" id="209880"/>
<value value="Reproduz Música" id="338211"/>
<value value="Rádio" id="209878"/>
</filter>
<filter name="Tipo de Teclado" id="4193">
<value value="Teclado Alfanumérico" id="209609"/>
<value value="Touchscreen" id="209621"/>
<value value="Teclado QWERTY Completo" id="209607"/>
<value value="Teclado QWERTY Reduzido" id="209608"/>
</filter>
(...)
</filters>


filtrosProdutos.CategoryId = 93;
string result = apiBuscape.FindProductList(filtrosProdutos);


<filters>
<filter name="Marca" id="182">
<value value="Olympus" id="1807"/>
<value value="BenQ" id="2391"/>
<value value="Bright" id="253144"/>
<value value="Britânia" id="109421"/>
<value value="Canon" id="1797"/>
<value value="Fujifilm" id="2395"/>
<value value="HP" id="1803"/>
<value value="JVC" id="2396"/>
<value value="Kodak" id="1804"/>
<value value="Multilaser" id="60246"/>
<value value="Nikon" id="1806"/>
<value value="Panasonic" id="1809"/>
<value value="Polaroid" id="1813"/>
<value value="Samsung" id="1814"/>
<value value="Sanyo" id="71080"/>
<value value="Sony" id="1817"/>
<value value="Yashica" id="2401"/>
</filter>
<filter name="Tipo" id="4708">
<value value="Standard" id="279322"/>
<value value="Avançado" id="279321"/>
</filter>
<filter name="Resolução" id="183">
<value value="Menos de 10 Megapixels" id="61"/>

Podemos ver que temos vários filtros disponíves em cada categoria, que por sua vez, tem seus próprios filtros. Na categoria 77 (celular) podemos filtrar por marca, operadora, quantidade de chips, a opção de ter , ou não, câmera, entre tantos outros. Na categoria 93 (câmeras digitais) podemos filtrar, por exemplo, por marca, tipo, resolução, ou memória interna – que não colocamos para o xml de exemplo não ficar muito grande.

Vamos utilizar, então, o filtro “tipo de teclado”, disponível na categoria 77 (celular) para obter todos os celulares com touchscreen. Localize no XML o filtro com o nome “tipo de teclado” e perceba que o filtro com esse nome tem um ID, que é o 4193. Agora, dentro do nó “tipo de teclado” localize o valor touchscreen. E esse valor também possui um ID, que é 209621.

Precisamos destes dois valores para realizar a filtragem. O nameId, que no nosso caso é 4193, e o valueId, que nesse caso é o 209621. Vamos adicionar esses valores à propriedade SpecFilters do objeto filtrosProdutos, que instanciamos no início desse tutorial. Depois, executamos o método FindProductList para obter o retorno.

Para adicionar os parâmetros corretamente à propriedade SpecFilters, devemos instanciar um novo objeto do tipo SpecIds, informando os valores que coletamos no XML. Segue abaixo o exemplo:

filtrosProdutos.CategoryId = 77;
filtrosProdutos.SpecFilters.Add(new SpecIds(4193, 209621));
string result = apiBuscape.FindProductList(filtrosProdutos);

<?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="29" totalResultsReturned="16" totalResultsAvailable="463" 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>2011-12-27T11:28:20.924-02:00</date>

<elapsedTime>25</elapsedTime>
<status>success</status>
<code>0</code>
<message>success</message>
</details>
<category hasOffer="false" isFinal="true" parentCategoryId="6420" id="77">
<thumbnail url="http://imagem.buscape.com.br/bp5/categorias/77.jpg"/>

<links>
<link type="category" url="http://compare.buscape.com.br/celular-e-smartphone.html?mdapp=100&amp;mddtn=69672797"/>
<link type="xml" url="http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=77"/>
</links>
<name>Celular e Smartphone</name>
</category>
<product quantity="0" id="355580" eco="false" hasMetaSearch="false" categoryId="77" totalSellers="9" fullDescription="false">
<productName>Samsung Omnia W GT-I677 GSM Desbloqueado</productName>
 

Devido ao tamanho do XML, estamos exibindo somente os três primeiros itens retornados, mas é possível ver que somente modelos com a característica touchscreen foram retornados.

Também é possível filtrar por mais de uma característica. Para isso, é só adicionar à propriedade SpecFilters todas as características pelas quais desejamos filtrar, uma de cada vez.

Como exemplo, vamos obter todas as câmeras da marca (id 182) Canon (id 1797), com uma resolução (id 183) menor que 10 megapixels (id 61):

filtrosProdutos.CategoryId = 93;
filtrosProdutos.SpecFilters.Add(new SpecIds(182, 1797));
filtrosProdutos.SpecFilters.Add(new SpecIds(183, 61));

Label1.Text = apiBuscape.FindProductList(filtrosProdutos);

<?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="2" totalResultsReturned="16" totalResultsAvailable="26" 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>2011-12-27T11:36:43.154-02:00</date>

<elapsedTime>19</elapsedTime>
<status>success</status>
<code>0</code>
<message>success</message>
</details>
<category hasOffer="false" isFinal="true" parentCategoryId="9627" id="93">
<thumbnail url="http://imagem.buscape.com.br/bp5/categorias/93.jpg"/>

<links>
<link type="category" url="http://compare.buscape.com.br/camera-digital.html?mdapp=100&amp;mddtn=69672797"/>
<link type="xml" url="http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=93"/>
</links>
<name>Câmera Digital</name>
</category>
<product quantity="0" id="191830" eco="false" hasMetaSearch="false" categoryId="93" totalSellers="1" fullDescription="false">
<productName>Canon PowerShot SD1100 IS 8.0 Megapixels</productName>

Espero que o artigo tenha sido útil e tenha sanado algumas dúvidas. Mas caso ainda tenha ficado alguma, só encontrar em contato!

Até  apróxima!

pelo Dev Buscapé Developer desenvolvedores externos podem utilizar o WebService disponível pelo Buscapé para criar suas próprias aplicações. No Githun, acompanhe /devbuscapecompany

Ver perfil