.NET

22 jul, 2011

Construindo uma biblioteca de agregação RSS.NET

Publicidade

RSS é uma tecnologia muito útil para pessoas que, assim como eu, investem parte do seu tempo lendo o conteúdo gerado por vários blogueiros da nossa área. Se você quer saber mais sobre os esquemas que formam essa tecnologia de agregação, clique aqui.

No momento estou produzindo um projeto que irá gerenciar e publicar conteúdo, então precisei consumir alguns feeds através de uma aplicação .NET. Como sou preguiçoso, fiz uma pequena pesquisa e esbarrei com uma biblioteca Open Source de leitura de feeds, o RSS.NET.

A biblioteca possui um design Old School, da época que não existia Generics e herdávamos de CollectionBase para ter uma classe de coleção mais legível. Apesar de simples, a biblioteca é muito poderosa e de fácil utilização. Vejam como consumir um feed no código a seguir:

[TestMethod]
public void Informacoes_basicas_do_feed()
{
var url = "http://heroisdati.com/feed/";

// Realiza a leitura do feed.
var feed = RssFeed.Read(url);

// Informa a URL do Feed que foi carregado.
Assert.AreEqual(url, feed.Url);

// Versão do feed.
Assert.AreEqual(RssVersion.RSS20, feed.Version);

// Indica se o que foi retornado é um cache.
Assert.IsFalse(feed.Cached);

// Tag de identidade do feed. Um hash utilizado para controlar o cache.
Trace.WriteLine(feed.ETag);

// Última data de modificação.
Trace.WriteLine(feed.LastModified);
}

Além das informações básicas do feed, você também acessa as informações sobre os canais que o mesmo contém. Confira o código:

[TestMethod]
public void Informacoes_sobre_o_canal()
{
var feed = RssFeed.Read("http://heroisdati.com/feed/");

// Indica quantos canais o feed contem.
Assert.AreEqual(1, feed.Channels.Count);

// O canal descreve o conteúdo do feed.
var heroisdati = feed.Channels[0];

// Título do canal.
Assert.AreEqual("Heróis da T.I.", heroisdati.Title);

// Link do canal.
Assert.AreEqual("http://www.heroisdati.com/", heroisdati.Link.ToString());

// Descrição do canal.
Assert.AreEqual("Por Denis Ferrari", heroisdati.Description);
}

No canal, você terá acesso a todos os seus itens, podendo utilizar todas as informações necessárias para o acesso à informação. Vejam como é simples:

[TestMethod]
public void Informacoes_dos_posts()
{
var feed = RssFeed.Read("http://heroisdati.com/feed/");
 
var heroisdati = feed.Channels[0];
 
// Quantidade de posts no canal.
Trace.WriteLine(heroisdati.Items.Count);
 
// O último post é o mais novo.
var ultimoPost = heroisdati.Items[0];
 
// Título do post.
Trace.WriteLine(ultimoPost.Title);
 
// Link do post.
Trace.WriteLine(ultimoPost.Link);
 
// Autor do post.
Trace.WriteLine(ultimoPost.Author);
 
// Descrição do post.
Trace.WriteLine(ultimoPost.Description);
 
// Link para os comentários do post.
Trace.WriteLine(ultimoPost.Comments);
 
// Na prática, essa coleção apresenta as categorias e as tags.
foreach (RssCategory categoria in ultimoPost.Categories)
{
// Nome da categoria
Trace.WriteLine(categoria.Name);
}
}

Essa biblioteca é muito simples e poderosa. Já possui uma versão comercial melhorada, mas a Open Source me atendeu bem até agora. Sendo assim, se precisar trabalhar com RSS, fica a dica da biblioteca.

Links importantes:

Abraços!