Inicio > .NET Framework, C#, Código y ejemplos > Cómo utilizar los servicios de .NET Framework para leer canales RSS y ATOM

Cómo utilizar los servicios de .NET Framework para leer canales RSS y ATOM


He añadido un código de ejemplo a la Galería de Código de MSDN, a continuación transcribo lo que publiqué. Pueden descargar el código desde aquí.

 

Introducción

 

Los canales RSS y ATOM proveen un mecanismo estándar para publicar contenido sobre sitios web, como texto, imágenes, vídeos, etc. Dichos formatos son documentos XML con una estructura predefinida. Durante cierto tiempo la solución para crear un lector para dichos formatos ha sido, en el mundo de .NET, crear el documento y analizarlo a mano. Las últimas versiones de .NET vienen con servicios para poder analizar ese contenido de forma automática. El código aquí presentado muestra cómo hacerlo.

Construcción del ejemplo

El ejemplo está construido sobre .NET Framework 4, para Visual Studio 2010. Sin embargo debe poder portarse a .NET Framework 3.5 sin mucho problema. En particular, se utiliza la biblioteca System.ServiceModel.dll, la cual contiene las clases necesarias para leer los canales RSS y ATOM.

La compilación de este ejemplo es sencilla y no necesita consideraciones especiales.

Descripción

Básicamente el proceso de lectura de un canal RSS o ATOM se da siguiendo estos pasos.

  1. Descargar el contenido XML del canal, usando un XmlReader por ejemplo.
  2. Crear un formateador. Estos pueden ser, por ejemplo, las clases Rss20FeedFormatter, o bien Atom10FeedFormatter (del espacio de nombres System.ServiceModel.Syndication), para canales RSS y ATOM, respectivamente.
  3. Pasar el objeto XmlReader al método ReadFrom del Rss20FeedFormatter o del Atom10FeedFormatter.

Una vez hecho esto, el objeto formateador habrá analizado el XML y ¡bazzinga! estamos listos. Mediante la propiedad Feed se accede al contenido del canal, la cual a su vez cuenta con la propiedad Items, que es una colección para cada uno de los elementos encontrados.

El siguiente trozo de código es un extracto, el cual muestra cómo leemos el canal y cargamos el contenido en un control TreeView.

// Creamos el formateador, el cual será RSS o ATOM, dependiendo de la opción
// seleccionada por el usuario. 
SyndicationFeedFormatter formatter = CreateFormatter();

// Leemos el XML de la URL seleccionada...
using (XmlReader reader = XmlReader.Create(_urlText.Text))
{
    // ...y le decimos al formateador que analice el XML del feed. 
    formatter.ReadFrom(reader);
}
// Si la URL es inválida, recibiremos un UriFormatException. Si el XML 
// descargado tiene algún contenido inválido, que no se ciña a la especificación
// de RSS o de ATOM, entonces recibiremos un XmlException. 

// Vaciamos el árbol y añadimos un nodo raíz. 
_feedTree.Nodes.Clear();
TreeNode rootNode = _feedTree.Nodes.Add(formatter.Feed.Title.Text);

// Para cada elemento encontrado en el feed añadimos un nodo. Adjuntamos 
// el objeto de dicho elemento a la propiedad Tag del nodo, para poder
// referirnos a éste posteriormente (i.e. cuando se dispare el evento
// NodeMouseClick). 
foreach (SyndicationItem item in formatter.Feed.Items)
{
    TreeNode feedNode = rootNode.Nodes.Add(item.Title.Text);
    feedNode.Tag = item;
}

El siguiente trozo muestra cómo cargar el contenido de un elemento del canal en una caja de texto. También es un extracto del código fuente.

SyndicationItem item = args.Node.Tag as SyndicationItem; 
if (item != null) 
{ 
    StringBuilder text = new StringBuilder() 
        .AppendFormat("Título: {0}\r\n", item.Title.Text) 
        .AppendFormat("Publicado: {0}\r\n", item.PublishDate.DateTime) 
        .AppendFormat("Actualizado: {0}\r\n", item.LastUpdatedTime.DateTime) 
        .AppendLine() 
        .AppendFormat(item.Summary.Text) 
        .AppendLine() 
        .AppendLine(); 
    if (item.Content != null) 
    { 
        text.AppendLine(item.Content.Type); 
    } 
                 
    _contentText.Text = text.ToString(); 
 
    _linkLabel.Text = item.Title.Text; 
    _linkLabel.Tag = item; 
}

A continuación, una imagen de cómo luce el programa.

Lector sencillo de rss

Código fuente

 

La solución presenta estos proyectos:

1.- SimpleRssFeed. Muestra una aplicación en Windows Forms sobre cómo utilizar los canales de comunicación RSS y ATOM. Muestra cómo emplear las clases System.ServiceModel.Syndication.Rss20FeedFormatter.

  • RssFeed.cs – el formulario principal de la aplicación.

Más información

Para más información, revisa estos enlaces en la documentación de MSDN:

Atom10FeedFormatter

Rss20FeedFormatter

SyndicationFeed

SyndicationItem

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s