No artigo de hoje, nós vamos simular um formulário de pesquisa em um site, onde digitando os termos da pesquisa, exibiremos a lista dos produtos encontrados.
Para a sequência do artigo, é necessário termos o Wrapper.Net da API do Buscapé adicionado ao nosso projeto. Faça o download dos arquivos no nosso perfil do GitHub. Você pode adicionar somente a biblioteca .dll, ou se preferir, os arquivos fontes que também estão disponíveis.
Para efetuar a pesquisa, a primeira coisa que precisamos é de um campo de texto, no qual o usuário entrará com as palavras-chave, e de um botão para confirmar a ação. Também incluíremos um label para exibir mensagens informativas ao usuário. Não vamos dar muita atenção ao layout desses dois campos, pois o nosso foco aqui é o código para o desenvolvedor. O que precisamos então é algo semelhante à imagem:
Então, vamos no click do botão testar se algum valor foi preenchido para realizar a pesquisa na API do Buscapé.
protected void btnSearch_Click(object sender, EventArgs e)
{
string keyword = txtSearch.Text;
if (keyword.Length == 0)
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = "Digite o termo para pesquisa";
}
else
{
lblMessage.Text = string.Empty;
if (!FindProductsByKeyword(keyword))
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = "Nenhum produto encontrado";
}
}
}
Para a pesquisa no Buscapé, vamos implementar o método FindProductsByKeyword. Nesse método, instanciamos a classe Apiki_Buscape_API e também a FiltrosFindProducts, que nos auxiliarão na pesquisa à API. Para facilitar o tratamento do retorno, vamos mudar seu formato para JSON:
Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d", string.Empty, "BR", "XML");
Apiki_Buscape_API.FiltrosFindProducts filtros = new Apiki_Buscape_API.FiltrosFindProducts();
filtros.Keyword = keyword;
string json_retorno = apiBuscape.FindProductList(filtros);
Para tratar o retorno em JSON, vamos precisar adicionar dois namespaces ao projeto:
using System.Web.Script.Serialization; using System.Collections.Generic;
Vamos converter os nós product de retorno para o tipo ArrayList que facilitará a exibição dos dados. Para isso, vamos precisar do auxílio de um objeto Dictionary:
JavaScriptSerializer deserializer = new JavaScriptSerializer(); Dictionary data = deserializer.Deserialize<Dictionary>(json_retorno); ArrayList products = (ArrayList)data["product"];
Agora, percorreremos o ArrayList products e extrairemos dele os dados que precisamos para exibir:
foreach (Dictionary<string, object> prod in products)
{
Dictionary<string, object> prodData = (Dictionary<string, object>)prod["product"];
// Imagem
Dictionary<string, object> thumbnail = (Dictionary<string, object>)prodData["thumbnail"];
string imageSrc = thumbnail["url"].ToString();
// Url do produto
ArrayList links = (ArrayList)prodData["links"];
Dictionary<string, object> productLink = (Dictionary<string, object>)links[1];
Dictionary<string, object> link = (Dictionary<string, object>)productLink["link"];
string url = link["url"].ToString();
lblMessage.Text += string.Format(
"<p style=\"border: 1px solid #cccccc; width: 60%\">" +
"<a style=\"display: block\" href=\"{1}\">{2} - {3}</a>" +
"De R$ {4} até R$ {5} <br />" +
"<img src=\"{0}\" />" +
"</p>",
imageSrc,
url,
prodData["id"],
prodData["productname"],
prodData["pricemin"],
Quando nossa pesquisa obtiver resultados, teremos na tela a listagem de produtos:
Também tratamos para exibir uma mensagem quando nenhum produto for retornado pela API:
Pronto, temos nossa ferramenta de pesquisa de produtos por palavras-chave. Abaixo, veja como ficou todo o código usado:
protected void btnSearch_Click(object sender, EventArgs e)
{
string keyword = txtSearch.Text;
if (keyword.Length == 0)
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = "Digite o termo para pesquisa";
}
else
{
lblMessage.ForeColor = System.Drawing.Color.Black;
lblMessage.Text = string.Empty;
if (!FindProductsByKeyword(keyword))
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = "Nenhum produto encontrado";
}
}
}
public bool FindProductsByKeyword(string keyword)
{
Até a próxima!




