Criando um shopping baseado em produtos do Mercado Livre
Todos os desenvolvedores que trabalharam diretamente com sites para internet já precisaram um shopping. Algumas vezes porque seu cliente que vender algo, outras vezes porque é conveniente ganhar algum dinheiro a mais com publicidade no seu site.
Vamos ver agora uma das maneiras de fazer isso. Para tal, utilizaremos uma das facilidades que os mercados-sócios do mercado livre possuem. Uma base de pesquisa de produtos em XML.
Para mais informações sobre o programa de afiliados do mercado livre acesse o link abaixo:
http://pmsapp.mercadolivre.com.br/jm/pms
Sobre a requisição do documento XML
A busca de produtos acontece por de parâmetros passados na URL de requisição do XML. Abaixo segue a URL básica e a listagem dos demais parâmetros que podem ser utilizados na URL para gerar a requisição.
Apenas esclarecendo que o torna-se mercado-sócio você terá acesso ao documento completo para a implementação do XML
Estrutura básica para busca de produtos:
http://www.mercadolibre.com.br/jm/searchXml
Parâmetros
A URLs para as categorias é:
http://www.mercadolivre.com.br/jm/categsXml
Parâmetros
Vamos ao código
Crie um projeto de web site e adcione uma classe chamada NegocioXml.
Abaixo a Listagem 01 mostra a implementação da classe.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
/// <summary>
/// Classe de negocio baseada no Xml do mercado livre
/// </summary>
public class NegocioXml
{
#region Declarações
protected string strXmlCategoria;
protected string strXmlProduto;
protected string CODSITE;
protected DataSet objXmlData;
#endregion
public NegocioXml()
{
}
/// <summary>
/// Retorna a o conteudo da chave UrlProdutos do Web.Config
/// </summary>
protected string UrlProdutos
{
get { return ConfigurationManager.AppSettings["UrlProdutos"]; }
}
/// <summary>
/// Retorna a o conteudo da chave UrlCategorias do Web.Config
/// </summary>
protected string UrlCategorias
{
get { return ConfigurationManager.AppSettings["UrlCategorias"]; }
}
/// <summary>
/// Retorna um DataTable com as lista de produtos de uma determinada categoria,
/// a partir da consulta ao Xml do Mercado livre
/// </summary>
/// <param name="IdCategoria"></param>
/// <returns></returns>
public DataTable ListaProdutos(string IdCategoria)
{
CODSITE = "MLB";
strXmlProduto = this.UrlProdutos + "?as_categ_id=" + IdCategoria + "&as_qshow=10";
objXmlData = new DataSet();
objXmlData.ReadXml(strXmlProduto);
return objXmlData.Tables["item"];
}
public DataTable ListaProdutosFiltro(string Filtro)
{
CODSITE = "MLB";
strXmlProduto = this.UrlProdutos + "?as_qshow=10&as_filtro_id=" + Filtro;
objXmlData = new DataSet();
objXmlData.ReadXml(strXmlProduto);
return objXmlData.Tables["item"];
}
/// <summary>
/// Retorna um DataView com as lista de produtos de uma determinada categoria,
/// a partir da consulta ao Xml do Mercado livre
/// </summary>
/// <param name="IdCategoria">Id da categoria pesquisada</param>
/// <returns>Um DataView com os prosutos</returns>
public DataView ListaCategorias()
{
CODSITE = "MLB";
strXmlCategoria = this.UrlCategorias + "?as_site_id=" + CODSITE + "&as_only_main=Y";
objXmlData = new DataSet();
objXmlData.ReadXml(strXmlCategoria);
return objXmlData.Tables["category"].DefaultView;
}
Listagem 01 – Implementação da classe NegocioXml.
Todos os métodos acima são baseados na leitura de arquivos XML a partir de sites remotos (no caso o www.mercadolivre.com.br).
Adicione ao web.config os parâmetros com as URL’s de acesso ao XML do Mercado Livre conforme Listagem 02.
<appSettings>
<add key="UrlCategorias" value="http://www.mercadolivre.com.br/jm/categsXml"/>
<add key="UrlProdutos" value="http://www.mercadolivre.com.br/jm/searchXml"/>
</appSettings>
Listagem 02.
Agora vamos codificar a página default.aspx acresentando uma tabela com 1 linha e 2 colunas. Na colunas da esquerda coloque um GridView chamado gvCategorias e na coluna da direita coloque um DataList chamado dlProdutos.
As veja na Listagem 03 as propriedades alteradas para o gvCategorias e o dlProdutos.
gvCategorias | |
AutoGenerateColumns |
False |
ShowHeader |
False |
|
|
dlProdutos | |
RepeatColumns |
2 |
RepeatDirection |
Horizontal |
ShowFooter |
False |
ShowHeader |
False |
Listagem 03 – Propriedades alteradas
Adicione no item template do gvCategorias um controle Hyperlink.
No item template do dlProdutos adicione um controle Hyperlink e um controle Imagem.
Na Listagem 04 mostra a implementação completa do gvCategorias e do dlProdutos
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%">
<tr>
<td style="width:30%" valign="top">
<asp:GridView ID="gvCategorias" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="linkCategoria" runat="server" NavigateUrl='<%#"?id_cat=" + Eval("id")%>' ><%# Eval("name") %></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
<td valign="top">
<asp:DataList ID="dlProdutos" runat="server" RepeatColumns="2" RepeatDirection="Horizontal"
ShowFooter="False" ShowHeader="False">
<ItemTemplate>
<asp:Image ID="imgProdutos" runat="server" ImageUrl='<%#Eval("image_url")%>' /><br />
<asp:HyperLink ID="linkProdutos" runat="server" NavigateUrl='<%#Eval("link")%>' Target="_blank">
<%#Eval("title")%>
</asp:HyperLink>
</ItemTemplate>
<ItemStyle Width="200px" HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:DataList></td>
</tr>
</table>
Listagem 04 – Implementação do gvCategorias e dlProdutos
Agora só nos restando programar quando e como serão carregados os objetos citados acima. No load da página vamos carregar o gvCategorias apenas quando não for um PostBack. Da mesma forma vamos carregar o dlProdutos. Na Listagem 05 segue a implementação dos métodos.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.CarregaCategorias();
string strIdCategoria = Request.QueryString["id_cat"];
if (strIdCategoria != "" && strIdCategoria != null)
{
this.CarregaProdutosPorCategoria(strIdCategoria);
}
}
}
protected void CarregaCategorias()
{
objXml = new NegocioXml();
gvCategorias.DataSource = objXml.ListaCategorias();
gvCategorias.DataBind();
}
protected void CarregaProdutosPorCategoria(string IdCategoria)
{
objXml = new NegocioXml();
dlProdutos.DataSource = objXml.ListaProdutos(IdCategoria);
dlProdutos.DataBind();
}
protected void CarregaProdutos24Horas()
{
objXml = new NegocioXml();
dlProdutos.DataSource = objXml.ListaProdutosFiltro("24_HS");
dlProdutos.DataBind();
}
Listagem 05 – Código da página default.aspx.cs
Veja na figura 01 o resultado final.
Figura 01 – Resultado da aplicação
Dessa forma vimos o quanto é simples trabalhar com leitura de arquivos xml dinâmicos em sites remotos no C# 2.0 + Visual Studio 2005.
Também aprendemos uma maneira mais otimizada de ganhar dinheiro com publicidade na web