Crear un canal RSS

C#
Autor: Dámaso Velázquez Álvarez

En este artículo vamos a ver cómo crear un canal RSS en C#. Lo primero va a ser crear un archivo .aspx que llamaremos rss.aspx, por ejemplo.

Vamos a generar el código XML del fichero rss.aspx de manera dinámica, en tiempo de ejecución. Para ello tenemos que implementar el fichero rss.aspx de la siguiente forma.

El código html que va a tener el fichero será el siguiente:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="rss.aspx.cs" Inherits="rss" %>

Supongamos que tenemos un objeto de la clase DataSet llamado dsRSS que hemos rellenado con la información relativa a los artículos que queremos ofrecer vía RSS. El DataSet estará formado por cuatro columnas: titulo, enlace, vista_previa y fecha. A partir de esos datos rellenaremos nuestro canal RSS.

Crearemos un método que genere el contenido RSS en XML (el código XML será devuelto como String) de la siguiente forma:

public String getCanalRSS(DataSet dsRSS)
{
   MemoryStream ms = new MemoryStream();
   XmlTextWriter writer = new XmlTextWriter(ms, System.Text.Encoding.UTF8);
   writer.WriteStartDocument();
   writer.WriteStartElement("rss");
   writer.WriteAttributeString("version", "2.0");
   writer.WriteStartElement("channel");
   writer.WriteElementString("description", "Canal RSS de ejemplo");
   writer.WriteElementString("link", "Dirección del sitio web");
   writer.WriteElementString("title", "Título del canal RSS");
   for (int i = 0; i < dsRSS.Tables[0].Rows.Count; i++)
   {
      writer.WriteStartElement("item");
      writer.WriteElementString("title", dsRSS.Tables[0].Rows[i]["titulo"].ToString());
      writer.WriteElementString("link", dsRSS.Tables[0].Rows[i]["enlace"].ToString());
      writer.WriteElementString("description", dsRSS.Tables[0].Rows[i]["vista_previa"].ToString());
      writer.WriteElementString("pubDate", DateTime.Parse(dsRSS.Tables[0].Rows[i]["fecha"].ToString()).ToString("R"));
      writer.WriteEndElement();
   }
   writer.WriteEndElement();
   writer.WriteEndElement();
   writer.Flush();

   byte[] buffer;
   buffer = ms.ToArray();
   return System.Text.Encoding.UTF8.GetString(buffer);
}


Posteriormente programaremos el evento Page_Load del fichero rss.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
   //Rellenaremos el contenido del DataSet dsRSS en este punto
   //para utilizarlo en la llamada al método getCanalRSS que haremos posteriormente

   Response.ContentType = "text/xml";
   Response.Write(this.getCanalRSS(dsRSS));
}

El DataSet dsRSS tendrá que ser rellenado al comienzo del evento Page_Load con el contenido del canal RSS. Lo habitual será rellenarlo mediante una consulta a la base de datos, con los últimos registros.

Necesitaremos incluir al principio del fichero rss.aspx.cs el siguiente código:

using System.Xml;
using System.IO;

Podemos insertar el siguiente código html en la cabecera de la página (entre las etiquetas <head> y </head>):

<link rel="alternate" type="application/rss+xml" title="Título del canal RSS" href="url del fichero rss.aspx" />

para indicarle al navegador que nuestro sitio web tiene canales RSS. Así cuando el usuario esté viendo la web, sabrá si hay canales RSS en dicha web.

Podría interesarte...

Canales RSS en páginas genéricas
Ejemplo en el que especificamos dinámicamente el canal RSS de una web