Listando mensagens do Twitter - MVC

O Twitter tornou-se uma forte ferramenta de comunicação na web. Cada vez mais empresas e usuários aderem ao Twitter. Pela sua enorme facilidade de disseminar informações.

Sendo assim, se você trabalha com o desenvolvimento de websites, muito provavelmente vai passar por um projeto no qual o usuário vai solicitar que as suas últimas mensagens do twitter apareçam no site.

Dito isso, vamos ao que interessa!

A parte mais iportante desse código é representada pela classe Twitter.cs. Tratando cada mensagem como um objeto, esta classe possui as propriedades como Autor da mensagem, Link, Foto do Autor, Conteúdo da Mensagem. O que essa classe faz é uma requisição para a API do Twitter passando um filtro desejado, formado através de querys strings.

Para entender mais sobre a API e seus filtros acesse http://dev.twitter.com/.

A classe Twitter:

[sourcecode language="csharp"]
public class Twitter
{
public string AuthorName { get; set; }
public string AuthorUri { get; set; }
public string Content { get; set; }
public string Updated { get; set; }
public string Link { get; set; }

public static List<Twitter> GetTwitter(string search)
{
//Faz a pesquisa no twitter de acordo com o filtro passado
var request = WebRequest.Create("http://search.twitter.com/search.atom?" + search) as HttpWebRequest;
var twitterViewData = new List<Twitter>();

if (request != null)
{
using (var response = request.GetResponse() as HttpWebResponse)
{
//Lê o xml do resultado da pesquisa
using (var reader = new StreamReader(response.GetResponseStream()))
{
var document = XDocument.Parse(reader.ReadToEnd());
XNamespace xmlns = "http://www.w3.org/2005/Atom";

//Cria uma lista do resultado
twitterViewData = (from entry in document.Descendants(xmlns + "entry")
select new Twitter
{
Content = entry.Element(xmlns + "content").Value,
Updated = Format_DateTime(entry.Element(xmlns + "updated").Value),
AuthorName = entry.Element(xmlns + "author").Element(xmlns + "name").Value,
AuthorUri = entry.Element(xmlns + "author").Element(xmlns + "uri").Value,
Link = (from o in entry.Descendants(xmlns + "link")
where o.Attribute("rel").Value == "image"
select new { Val = o.Attribute("href").Value }).First().Val
}).ToList();
}
}
}

return twitterViewData;
}

public static string Format_DateTime(string value)
{
// Cria um CultureInfo para o Português.
CultureInfo ci = new CultureInfo("pt-BR");

value = value.Replace("T", " ").Replace("Z", string.Empty);

DateTime _Date;
if (!DateTime.TryParse(value, out _Date))
throw new ArgumentException("Erro ao converter.");

// Formata a data para o formato de tempo brasileiro.
return _Date.ToString(ci);
}
[/sourcecode]

O controller, na Action Result Index, solicita a lista de mensagens do Twitter pelo metodo GetTwitter da classe Twitter e passa esses valores para a propriedade dinâmica Twitter na ViewBag:

[sourcecode language="csharp"]

public class TwitterController : Controller
{
//
// GET: /Twitter/

public ActionResult Index()
{
//Passa como parametro o valor da pesquisa
//Neste exemplo:
//from -> Filtra as mensagens por usuário
//rpp -> Retorna apenas os últimos 15 resultados
ViewBag.Twitter = Models.Twitter.GetTwitter("from=twitterapi&rpp=15");
return View();
}

}
[/sourcecode]

A View recebe a lista através da ViewBag e carrega seus valores de acordo com a formatação seguinte:

[sourcecode language="csharp"]
@{
ViewBag.Title = "Lista de Mensagens do Twitter";
}

<h2>
Index</h2>
<div id="Twitter">
<div class="titleTwitter">
@{
var userTwitter = ((List<MvcTwitter.Models.Twitter>)ViewBag.Twitter).FirstOrDefault();
<a href="@userTwitter.AuthorUri" target="_blank" class="userTwiiter">
<img src="@userTwitter.Link" alt="Twitter Logo" />@userTwitter.AuthorName</a>
}
</div>
<ul>
@foreach (var item in ViewBag.Twitter)
{
<li>
@Html.Raw(item.Content)
<span>@item.Updated</span> </li>
}
</ul>
<div class="titleTwitter">
<a href="">
<img alt="Twitter" alt="Twitter" src="@Url.Content("~/Content/Image/link_twitter.png")">Twitter</a>
</div>
</div>

[/sourcecode]

Estilo css, pra dar uma melhorada no visual:

[sourcecode language="css"]

/*
-------Twitter*/
#Twitter
{
border: 1px solid #8AA2AA;
padding:1px;
}
.titleTwitter
{
background: #8AA2AA;
padding: 5px 10px;
}
.titleTwitter a
{
font-size:8pt;
color:#fff;
}
.titleTwitter img
{

margin-right: 5px;
vertical-align:middle;
}
.userTwitter img
{
width: 30px;
}
#Twitter ul
{
list-style:none;
margin:0;
padding:0;
}
#Twitter ul li
{
font-size: 8pt;
border-bottom: 1px solid #ccc;
padding:10px 5px;
text-align:justify;
}
#Twitter ul li a
{
font-weight:bold;
}
#Twitter ul li span
{
display:block;
text-align:left;
font-size:7pt;
}
#Twitter ul li:hover
{
background:#CCEEF9;
}
[/sourcecode]

Fonte:Using ASP.NET MVC 2 to Query Twitter's Public API - FIFA 2010