Desenvolvimento - ASP. NET

Integração Asp.Net + Twitter sem API de terceiros

Como exibir as mensagens do Twitter em uma página Asp.Net sem utilização de API´s de terceiros.

por Marcel Goldhardt



Atualmente existem diversas API´s para download que permitem adicionar em suas aplicações/sites em Asp.Net, as mensagens postadas no Twitter. Mas e se eu quiser fazer algo personalizado? Relativamente fácil. Basta utilizar a própria API do Twitter (http://apiwiki.twitter.com).

Funciona da seguinte maneira: uma requisição GET deve ser feita para o serviço, passando como parâmetro o usuário. Como retorno, temos um XML contendo as mensagens. Com este XML em mãos, basta apenas manipulá-lo da maneira que acharmos mais conveniente. Para exibição do conteúdo, qualquer um dos componentes que suportem DataBinding nos serve (GridView, FormView, etc).

Primeiro Passo: conectando com o serviço

protected string LerRetorno()

{

try

{

            _usuario = "marcelgol";

            _qtdemensagens = 4;

string url = string.Format("http://twitter.com/statuses/user_timeline.xml?screen_name={0}", _usuario);

           

WebClient client = new WebClient();

            Stream stream = client.OpenRead(url);

            stream.Flush();

            StreamReader reader = new StreamReader(stream);

            return reader.ReadToEnd();

        }

        catch

        {

            return "Erro ao conectar o Twitter";

        }

    }

Segundo Passo: Agora é só manipular o XML e exibir o conteúdo em algum controle. No meu caso, eu manipulei do jeito que eu queria e criei um DataTable, que será o source do meu controle (DataList):

protected void Carregar()

    {

        try

        {

            XmlDocument DocXML = new XmlDocument();

            DocXML.LoadXml(LerRetorno());

            XmlNodeList lista;

            lista = DocXML.SelectNodes("//status");

string nome = DocXML.SelectSingleNode("//status").SelectSingleNode("//user").SelectSingleNode("name").InnerText;

           

string screen_name = DocXML.SelectSingleNode("//status").SelectSingleNode("//user").SelectSingleNode("screen_name").InnerText;

           

string pic_url = DocXML.SelectSingleNode("//profile_image_url").InnerText;

            imgAvatar.ImageUrl = pic_url;

            HyperLink1.Text = "@" + screen_name;

HyperLink1.NavigateUrl = "http://www.twitter.com/" + screen_name;

            DataTable tabela = new DataTable();

            tabela.Columns.Add("HORARIO");

            tabela.Columns.Add("MENSAGEM");

            int count = 0;

            foreach (XmlNode node in lista)

            {

                if (count < _qtdemensagens)

                {

                  DataRow linha = tabela.NewRow();

DateTime dataxml =   ParseDateTime(node.SelectSingleNode("created_at").InnerText);

                   

TimeZone zona = TimeZone.CurrentTimeZone;

                  dataxml = zona.ToLocalTime(dataxml);

                  linha["HORARIO"] =

dataxml.ToString("dd/MM/yyyy HH:mm");

                 

linha["MENSAGEM"] = node.SelectSingleNode("text").InnerText.ToString();

                 

tabela.Rows.Add(linha);

                  count++;

                }

            }

            dtlMensagens.DataSource = tabela;

            dtlMensagens.DataBind();

        }

        catch

        {

            //Tratamento de alguma exception erro

        }

    }

OBS: Ainda fiz uso de um método para formatar a data da maneira desejada:

private DateTime ParseDateTime(string date)

    {

        string dayOfWeek = date.Substring(0, 3).Trim();

        string month = date.Substring(4, 3).Trim();

        string dayInMonth = date.Substring(8, 2).Trim();

        string time = date.Substring(11, 9).Trim();

        string offset = date.Substring(20, 5).Trim();

        string year = date.Substring(25, 5).Trim();

  string dateTime = string.Format("{0}-{1}-{2} {3}", dayInMonth,     month, year, time);

        DateTime ret = DateTime.Parse(dateTime);

        return ret;

    }

As mensagens do Twitter exibidas no blog www.goldhardt.com.br, são buscadas desta maneira. Você pode adicionar diversas funcionalidades (como envio de mensagens, por exemplo). Está bem documentado no link passado acima.

Conheça o curso Curso Integrando Aplicativos ASP.NET C# com Redes Sociais (Twitter e Facebook) da Devmedia

Marcel Goldhardt

Marcel Goldhardt