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

 

dssccsbpmlfig02.jpg 

dssccsbpmlfig03.jpg

 

A URLs para as categorias é:

http://www.mercadolivre.com.br/jm/categsXml

 

Parâmetros

 

dssccsbpmlfig04.jpg 

 

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.

 

dssccsbpmlfig05.jpg 

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