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 GoldhardtAtualmente 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.