Como crear RSS con .Net en pocos minutos

Voy a explicar aquí como hice el generador de RSS para el sitio www.preguntaalexperto.net.

El requerimiento era simple: permitir que lectores se subscribieran mediante RSS para conocer acerca de los nuevos artículos disponibles en el sitio. Es decir, queriamos lograr subscribirnos mediante un cliente como RssBandit.

Así que lo primero fue buscar es schema del xml que genera para a partir de allí generar las clases pero increiblemente o lo encontré por ninguna parte. A decir verdad sí lo encontré pero no era lo que esperaba ya que eran o demasiado complejos o demasiado simples así que:

Busqué algo parecido a lo que necesitabamos y lo encontré en el rss de CodeProject. (http://www.codeproject.com/webservices/articlerss.aspx?cat=1).

La estructura es muy simple: 

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="2.0">
  <channel>
    <title>The Code Project Latest Articles</title>
    <link>http://www.codeproject.com</link>
    <description>Latest Articles from The Code Project</description>
    <language>en-us</language>
    <image>
      <title>The Code Project</title>
      <url>http://www.codeproject.com/images/codeproject100x30.gif</url>
      <link>http://www.codeproject.com</link>
      <width>100</width>
      <height>30</height>
      <description>The Code Project</description>
    </image>
    <copyright>Copyright © CodeProject, 1999-2008</copyright>
    <webMaster>webmaster@codeproject.com</webMaster>
    <lastBuildDate>Wed, 15 Oct 2008 15:10:00 GMT</lastBuildDate>
    <ttl>1</ttl>
    <generator>C# Hand-coded goodness</generator>

    <item>
      <title>Excel export from DatagridView</title>
      <description>A way to export data to native excel (xls) from a Datagridview with any data source</description>
      <link>http://www.codeproject.com/KB/grid/exceldatagridview.aspx</link>
      <author>kevinuni</author>
      <category>C#</category>
      <category>.NET</category>
      <category>Win32</category>
      <category>Intermediate</category>
      <pubDate>Wed, 15 Oct 2008 17:03:00 GMT</pubDate>
      <subject>Grid &amp; Data Controls</subject>
    </item>
  </channel>
</rss>

Esta es exactamente la información que yo quiero proveer!!

Ahora existen muchas posibilidades para crear este xml:

  1. Concatenando strings. La más sencilla, rápida y económica de todas. Hasta un mono puede mantener el código hecho de esta manera. Realmente, no sé por qué no lo hice así 🙂 El tema es que es tan poco elegante que pocos que…
  2. Usando un XmlTextWriter: Más elegante e igualmente efectiva.
  3. XDocument y XElement: También es muy buena.
  4. Serializando objetos: La más costosa y rígida alternativa. Esta es la que escogí 🙁

 

Luego de tener el xml es necesario validarlo con http://feedvalidator.org/ el cual examina un rss y arroja todos los problemas que tiene según el estandar. Desde el tamaño de la imagen (el logotipo), el formato de las fechas, los textos y muchas cosas más.

En cuanto a las fechas es bueno saber que deben formatearse según lo indica la RFC822. Les dejo un método extensor por si les llega a hacer falta para algo. Tampoco es muy elegante pero funciona a la perfección.

public static class DateExtensions
{
	public static string ToRfc822(this DateTime dt)
	{
		string rfc822dt = dt.ToString(@"ddd, dd MMM yyyy HH:mm:ss zzzz (UTC)",
		System.Globalization.DateTimeFormatInfo.InvariantInfo);
		rfc822dt = rfc822dt.Remove(rfc822dt.LastIndexOf(':'), 1);
		return rfc822dt;
	}
}

Luego de esto, hay que indicarle al browser que tenemos un rss para que muestre el iconito de modo que el usuario lo sepa. Esto se hace simplemente poniendo: 

<link href="http://www.preguntaalexperto.net/rss.aspx" title="Ultimos artículos"
	type="application/rss+xml" rel="alternate">
<link href="http://www.preguntaalexperto.net/rss.aspx?q=10masvistos" title="Los 10 artículos más vistos"
	type="application/rss+xml" rel="alternate">
<link href="http://www.preguntaalexperto.net/rss.aspx?q=10masvotados" title="Los 10 artículos mejor votados"
	type="application/rss+xml" rel="alternate">

Por último, solo me resta decir que como cada cliente RSS interpreta este xml como se le dá la gana, es bueno cumplir con todo lo que nos señala feedvalidator. Es to vale tanto si uno quiere que otros puedan usar su cliente favorito, suscribirse mediante feedburner, o lo que sea. Algo que feedvalidator no nos dice es que en el elemente <guid> (que lo exige) debe agregarsele un atributo isPemaLink=”false”. En síntesis, debe quedar así:

<guid isPermaLink="false">acá un guid</guid>

El guid no titne que necesariamente tener un G U I D sino que debe tener un identificador único como la url a ese post.

 

Lucas Ontivero

Sin categoría

4 thoughts on “Como crear RSS con .Net en pocos minutos

  1. Señor, puede aportar un ejemplo de código de

    Serializando objetos: La más costosa y rígida alternativa. Esta es la que escogí 🙁

    Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *