RSS en C#.Net

Primero, Que es RSS?

 

RSS ( Really Simple Syndication )


RSS es un sencillo formato de datos que es utilizado para redifundir contenidos a suscriptores de un sitio web. El formato permite distribuir contenido sin necesidad de un navegador, utilizando un software diseñado para leer estos contenidos RSS. A pesar de eso, es posible utilizar el mismo navegador para ver los contenidos RSS. Las últimas versiones de los principales navegadores permiten leer los RSS sin necesidad de software adicional.

RSS es parte de la familia de los formatos XML desarrollado específicamente para todo tipo de sitios que se actualicen con frecuencia y por medio del cual se puede compartir la información y usarla en otros sitios web o programas. A esto se le conoce como redifusión web. dicho de otro modo, el estándar RSS propone el formato en que la información (por ejemplo las noticias de un periódico o los artículos en un blog) debe mostrarse de cara al público. No se trata más que de otro "dialecto" XML.

 

Por ejemplo, imaginemos que tenemos una Web con una sección sobre noticias relacionadas con la Premier League y la Champion League. Por la filosofía de nuestra página, queremos compartir las noticias de modo que cualquiera pueda tener acceso a éstas sin necesidad de acceder a la Web. Para ello no tenemos más que proporcionar estas noticias en formato RSS, de modo que pueda ser leído tanto por programas lectores (llamados comúnmente agregadores) como por otros webmasters que decidan incorporar esas noticias en sus propias Webs.

Este acrónimo se usa para referirse a los siguientes estándares:

·         Rich Site Summary (RSS 0.91)

·         RDF Site Summary (RSS 0.9 y 1.0)

·         Really Simple Syndication (RSS 2.0)

·         Además es usual que el término RSS sea usado indistintamente para referirse a cualquiera de los formatos RSS o Atom.

Gracias a los agregadores o lectores de feeds (programas o sitios que permiten leer fuentes web) se pueden obtener resúmenes de todos los sitios que se desee desde el escritorio del sistema operativo, programas de correo electrónico o por medio de aplicaciones web que funcionan como agregadores. No es necesario abrir el navegador y visitar decenas de webs.

La redifusión web no es sólo un fenómeno vinculado a los weblogs, aunque han ayudado mucho a su popularización.

Para una completa especificación del formato RSS 2.0, puedes visitar http://www.rssboard.org/rss-specification

Elementos de Canal
Mostraremos los campos que definen al RSS en general. Los tres primero son obligatorios, el resto opcionales:
title: Es el título que le daremos a nuestro documento RSS y con el que se dará a conocer en cualquier lector de RSS.
link: enlace a la página a la que se refiere el documento RSS. En nuestro ejemplo mostramos un enlace a éste Blog: http://jonnathandeveloper2008.spaces.live.com.
– description: algo sencillito y descriptivo de lo que se puede encontrar en este RSS, como por ejemplo: "Blog ASP.NET 2.0 con C# en castellano".
ttl: sugiere la cantidad de minutos que debería ser cacheada la información. Es como decirle al lector de RSS "en tantos minutos no suelo añadir más información, por lo que puedes dejarlo en tu cache".
language: idioma en que está escrita la información.
generator: el programa o algoritmo que ha creado el RSS.


Elementos de Item
Vayamos ahora con los elementos Item. En nuestro ejemplo se trataría de los artículos
title: título del artículo, y que será lo primero que se muestre en un lector RSS.
link: url del artículo, de modo que desde el lector se pueda viajar hacia la fuente original del artículo.
description: en nuestro ejemplo es el texto completo del artículo, pero habitualmente no suelen ser más que las primeras líneas. La idea es que el  que lea sobre un lector RSS se interese sobre la noticia y posteriormente enlace al artículo original mediante link.
pubDate: representa la fecha y hora en que el artículo fue escrito. Debe estar en el formato de tipo "Fri, 05 Jan 2007 20:50:08 GMT". Esto se consigue con aplicando ToString("R") al DateTime correspondiente.
guid: representa a un identificador global único… y aquí se acaba el estándar. Los lectores RSS lo van a ver como un string, y nosotros somos quienes nos debemos de preocupar de que este identificador sea único. Por ejemplo, yo he decidido que, dado que cada artículo representa una única URL, el guid sea esa misma url.

Como has visto en las especificaciones oficiales, hay más elementos de RSS, pero son opcionales.

La clase RSS
Ahora sólo nos queda la tarea de hacer unas clases C# que respondan convenientemente a la estructura de RSS.
En líneas generales, tenemos tres clases: RSS, RSSChannel y RSSItem.

RSS tiene un único elemento Channel, y éste tiene como propiedades los elementos de canal y un listado genérico de RSSItem. En RSSItem encontraremos las propiedades que representan los elementos del Item.

Leer y escribir RSS
En el mismo fichero de descarga habréis visto dos ficheros ".cs": RSS.cs y RSSBLL.cs

RSS.cs contiene las tres clases de las que hemos hablado. Fijaos que se han añadido algunos atributos XML a las propiedades de las clases (XmlElement, XmlRoot y XmlIgnore)… ¿qué es eso?

Para leer y mostrar el fichero RSS vamos utilizar la clase XmlSerializer, ubicada dentro del namespace System.Xml.Serialization.

XmlSerializer hace un poquito de magia, que nos facilita el trabajo tremendamente. Dándole el tipo de una clase, es capaz de mostrarnos su equivalente XML, y viceversa: rellenar una instancia de la clase a partir de un XML.

Aplicado a nuestro ejemplo, veremos que a partir de la clase RSS, el XmlSerializer lo transformará en un fichero RSS mediante su método "Serialize"; y también, a partir de cualquier fichero RSS, rellenará una instancia a un objeto RSS mediante su método "Deserialize".

¿Y cómo hace esto? XmlSerialize utiliza propiedades de refactoring, es decir, que lee los metadatos para saber el nombre de las propiedades de una clase, su tipo, etc. Y ahí viene lo que comentábamos con lo de los atributos XML (XmlElement, XmlRoot y XmlIgnore), pues de alguna forma debemos decirle al XmlSerializer que la propiedad pubdate_DateTime no la muestre por XML o que la raíz del XML es "rss" y no "RSS".

algo del código:

public static void writeRSS(RSS rss)

{

XmlSerializer ser = new XmlSerializer(typeof(RSS));

StringBuilder sb = new StringBuilder();

using (StringWriter sw = new StringWriter(sb))

{

using (XmlTextWriter writer = new XmlTextWriter(sw))

{

writer.Formatting = Formatting.Indented;

ser.Serialize(sw, rss);

}

}

HttpResponse response = HttpContext.Current.Response;

response.Clear();

response.ContentType = "text/plain";

response.Write(sb.ToString());

response.Flush();

response.End();

}

public static RSS readRSS(string url)

{

RSS rss = new RSS();

XmlSerializer ser = new XmlSerializer(typeof(RSS));

using (XmlTextReader reader = new XmlTextReader(url))

{

try

{

rss = ser.Deserialize(reader) as RSS;

}

catch (Exception e)

{

HttpContext.Current.Response.Write(e.Message);

}

}

return rss;

}

About justindeveloper

I am MCP (Microsoft Certified Professional). MCTS (Microsoft Certified Technology Specialist) and MCPD (Microsoft Certified Professional Developer), also I am SAP Business One Certified!! Desarrollando desde el IDE de Visual Studio NET 2003 hasta ahora con el Visual Studio NET 2010. Desde Microsoft SQL Server 2000 hasta ahora con el Microsoft SQL Server 2008 R2 y tambien con SharePoint, desde WSS 3.0 y MOSS 2007 y ahora familirizandome con el Sharepoint Foundation 2010 & Sharepoint Server 2010. The software development will follow being every time more wonderful!
This entry was posted in Development. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s