domingo, 21 de novembro de 2010

Obtendo as últimas notícias do Terra

E aí, pessoal!


É um contexto, em que a informação é de extrema utilidade, que tal permitir que nossa aplicação apresente notícias atualizadas em tempo real? Pois é, a idéia desse artigo, é utilizar os feeds RSS do portal Terra (mais especificamente, sobre os assuntos de tecnologia) e carregar um Repeater com um DataTable previamente alimentado com XML.


Antes de mais nada, veja como ficará nossa aplicação ASP.NET.





Pois bem, abra o Visual Studio (usaremos a versão 2008 Professional Edition no escopo deste artigo) e crie um novo projeto do tipo Web Site com o nome RssTerra.



Adicione um controle Repeater na página Default.aspx e altere o template (aba Source) adicionando algumas tags conforme as linhas abaixo:


<asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
    <a href="<%# DataBinder.Eval(Container.DataItem, "link") %>" target="_blank">
      <%# DataBinder.Eval(Container.DataItem, "titulo") %>
    </a><br />
    <%# DataBinder.Eval(Container.DataItem, "data") %><br />
    <%# DataBinder.Eval(Container.DataItem, "descricao") %><br />
  </ItemTemplate>
  <SeparatorTemplate>
    <hr style="width: 400px; text-align: left;" />
  </SeparatorTemplate>
</asp:Repeater>

Fazendo algumas pequenas alterações pra melhorar a aparência, confira o código HTML completo da página Default.aspx.



<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Terra - RSS - Tecnologia</title>
</head>
<body style="font-family: Trebuchet MS; font-size: 11px;">
    <form id="form1" runat="server">
    <div>
        <h2>Últimas notícias de tecnologia do Terra</h2>
        <p>Desenvolvido por Tecla - Programação On-Line</p><br />
       
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <a href="<%# DataBinder.Eval(Container.DataItem, "link") %>" target="_blank">
                    <%# DataBinder.Eval(Container.DataItem, "titulo") %>
                </a><br />
                <%# DataBinder.Eval(Container.DataItem, "data") %><br />
                <%# DataBinder.Eval(Container.DataItem, "descricao") %><br />
            </ItemTemplate>
            <SeparatorTemplate>
                <hr style="width: 400px; text-align: left;" />
            </SeparatorTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>


Após a alteração no Repeater, veja o formato da exibição das notícias na aba Design da página.


A aparência da aplicação está pronta, só nos resta criar a rotina em linguagem C# para obter os dados do Terra através do arquivo XML. Perceba que iremos extrair os elementos do XML e alimentar o DataTable.




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            this.LerRssTerra();
    }
   
    /// <summary>
    /// Método utilizado para ler o rss de tecnologia do site TERRA
    /// </summary>
    private void LerRssTerra()
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("http://rss.terra.com.br/0,,EI12879,00.xml");

        DataTable dt = CriarDataTable();
        XmlNodeList noXml = xmlDoc.SelectNodes("/rss/channel/item");
        foreach (XmlNode no in noXml)
        {
            dt.Rows.Add(no["title"].InnerText,
                        DateTime.Parse(no["pubDate"].InnerText).ToString(),
                        no["description"].InnerText,
                        no["link"].InnerText);
        }
       
        Repeater1.DataSource = dt;
        Repeater1.DataBind();
    }

    /// <summary>
    /// Retorna a estrutura de um DataTable para alocar os elementos do xml
    /// </summary>
    /// <returns>DataTable</returns>
    private DataTable CriarDataTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("titulo", typeof(string));
        dt.Columns.Add("data", typeof(string));
        dt.Columns.Add("descricao", typeof(string));
        dt.Columns.Add("link", typeof(string));
        return dt;
    }
}


Feito isso, vamos executar nossa aplicação web. Pressione a tecla F5 ou clique no menu Debug > Start Debugging. Se tudo correr bem, o resultado será o mesmo da primeira imagem do artigo.

Até a próxima!


Nenhum comentário:

Postar um comentário

Deixe aqui seu comentário