lunes, 10 de enero de 2011

ASP.NET - Crear feeds RSS XML

Habida cuenta que las comunicaciones han traspasado dispositivos… seguramente puedes imaginarte la tremenda utilidad que tiene crear un feed xml mediante un httphandler ashx.
Yo les doy algunas utilidades:

1.- Dado que ya hay lectores de feeds rss, por qué no simplemente brindamos una url que proporcione contenido XML, el cuál puede ser leído desde cualquiera de los ya conocidos gestores de contenido de feeds rss.

2.- Aprovechar estos feeds para construir páginas web para dispositivos móbiles, dado que los feeds son ni más ni menos que contenido XML con una estructura y etiquetas estandarizadas a fin de que puedan ser reconocidas por los lectores de feeds.

3.- Los feeds pueden tener como origen de datos, una base de datos, un archivo de texto, un libro excel, el contenido de una página web, en fin… lo que sea.

Puede ser posible que te preguntes: y por qué no creas simplemente un servicio web que tenga un método que devuelva un archivo xml?
Porque no es necesario. A decir verdad el servicio web brinda más opciones como seguridad, etc… pero a veces sólo queremos un simple expendedor de contenido XML, y eso es lo que vamos a explicar.

Empecemos. Vamos a simular que el sgte es el feed de mi blog. Agregamos a nuestro proyecto C# un archivo .ashx llamado feed.ashx, y le ponemos el sgte código:
public class Feed : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string url = @"http://dotnet-peru.blogspot.com/";

System.Text.StringBuilder xml = new System.Text.StringBuilder();
xml.Append(@"<?xml version=""1.0"" encoding=""UTF-8"" ?>");
xml.Append(@"<rss version=""2.0"">");
xml.Append(@"<channel>");
xml.Append(@"<title>Artes y malas artes!!</title> ");
xml.AppendFormat(@"<link>{0}</link>", url);
xml.Append(@"<description>Artículos sobre tecnologías para desarrollar sistemas informáticos, con especial énfasis en ASP.NET.</description>");
xml.Append(@"<image>");
xml.Append(@"<url>https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-OxDo2EOeJjbz7tIqcLQgfOxGEHTdfa9-z_BV7LQcFAaRDYKJw1U7Xo7U9z4j0Xwwrucl_T_3ed_PMQv9-bpivZLWbgOqiRobYHfXDwYTB1-20yQX0hymX-TcpgJ_eWA0VQn1aAUaXWf9/s1600-r/optimus-prime.png</url>");
xml.AppendFormat(@"<link>{0}</link>", url);
xml.Append(@"</image>");

for (int i = 1; i <= 5; ++i)
{
xml.Append(@"<item>");
xml.AppendFormat(@"<title>Ocultar metodos de servicio web {0}</title>", i.ToString());
xml.AppendFormat(@"<link>{0}{1}</link>", url, "2010/12/aspnet-ocultar-metodos-de-servicio-web.html");
xml.AppendFormat(@"<description>Descripción {0}</description>", i.ToString());

xml.Append(@"<image>");
xml.AppendFormat(@"<url>{0}</url>", "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8OEuH9N4r7Iuno5aFLamwHLZbTIIKhKuJmWa_5br-EGDcKy0u0XTVezYuFfrVTmR63emr7DKIMETTqPZlxxK8_yQubCgp0f67_kqx6lHmv5JXB2GTRU3yclq7wBLfDgkEbd1y7UigcoJX/?imgmax=800");
xml.AppendFormat(@"<link>{0}</link>", "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8OEuH9N4r7Iuno5aFLamwHLZbTIIKhKuJmWa_5br-EGDcKy0u0XTVezYuFfrVTmR63emr7DKIMETTqPZlxxK8_yQubCgp0f67_kqx6lHmv5JXB2GTRU3yclq7wBLfDgkEbd1y7UigcoJX/?imgmax=800");
xml.Append(@"</image>");

xml.Append(@"</item>");
}

xml.Append(@"</channel>");
xml.Append(@"</rss>");

context.Response.ContentType = "text/xml";
context.Response.Write(xml.ToString());
}
Luego, abrimos el navegador FireFox y ponemos la ruta de nuestro handler feed.ashx, para que vean lo que ocurre:
feed_rss_xml

Ahora explico lo que pasa: Para que un extracto de XML (como el que construí arriba) sea reconocido como un feed rss, debe contener al menos las sgtes etiquetas:

Para el punto 1 de la imagen, necesité:

<rss ..>
<channel>
<title></title>
<link></link>
<description></description>

<image>
<url></url>
<link></link>
</image>

Y para cada uno de los items del punto 2 de la imagen, necesité las sgtes etiquetas:

<item>
<title></title>
<link></link>
<description></description>
</item>

Finalmente, cerramos el xml:

</channel>
</rss>

Yo creo que no hace falta más explicación no es cierto? el lector de feed rss automáticamente reconoció las etiquetas xml y estructuró el contenido como puedes ver en la imagen.

Espero que les sea de utilidad ;)

No hay comentarios.: