Crear un feed RSS dinámico
Fecha: 19-abr-2010 | Autor: Marcelo.
Guardado en: Artículos, Desarrollo Web, Recursos
Hoy en día la amplia mayoría de los CMS o manejadores de contenido, nos proveen un feed RSS dinámico con los contenidos que se van publicando en nuestro sitio o blog. Por ejemplo, WordPress nos provee por defecto el siguiente feed de Pixelar.me.
Pero si nosotros desarrollamos nuestro propio gestor de contenidos, o deseamos que una aplicación o script cuente con la funcionalidad de poder ofrecer un feed RSS dinámico, que muestre los últimos contenidos/artículos/productos que carguemos en el sitio, debemos desarrollarlo. Y es bastante más sencillo de lo que podría suponerse.
Primero, veamos qué es y cómo es un feed RSS.
Esencialmente un feed RSS es un archivo XML (Extensible Markup Language), la idea detras de esto es que es un formato que puede leerse sin necesidad de un navegador web; por ejemplo a través de lectores de RSS de escritorio.
Este archivo XML debe actualizarse dinamicamente al cargarse nuevos contenidos en nuestro sitio web.
Estructura de un RSS
El archivo XML que usaremos para nuestro feed debe comenzar con la definición de la versión de XML que usaremos (por ejemplo 1.0) y la codificación de caracteres (ej: UTF-8):
1 | <?xml version="1.0" encoding="UTF-8" ?> |
Y luego debemos definir la versión de RSS que utilizaremos (ej: 2.0) y crearemos el canal:
1 2 3 4 5 | <rss version="2.0"> <channel> </channel> </rss> |
Ahora, dentro de las tags <rss><channel></channel></rss> irá el contenido de nuestro feed. Primero, la definición/descripción del feed:
1 2 3 4 | <title>Pixelar.me</title> <link>http://pixelar.me</link> <description>Artículos sobre desarrollo web en Español.</description> <language>es</language> |
Por último, debemos incluir los contenidos o items que contendrá el feed, un ejemplo básico sería algo así:
1 2 3 4 5 | <item> <title>Título del contenido</title> <link>URL del contenido</link> <description>Descripción del contenido</description> </item> |
Con lo cuál nuestro feed RSS quedaría algo así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>Pixelar.me</title> <link>http://pixelar.me</link> <description>Artículos sobre desarrollo web en Español.</description> <language>es</language> <item> <title>Título del contenido</title> <link>URL del contenido</link> <description>Descripción del contenido</description> </item> <item> <title>Título del contenido</title> <link>URL del contenido</link> <description>Descripción del contenido</description> </item> <item> ... </item> </channel> </rss> |
Ahora, hagámoslo dinámico!
Bien, una vez que tenemos la estructura del feed, debemos hacer que dentro se carguen dinamicamente los últimos contenidos de nuestro sitio. Para ello tenemos 2 opciones:
- Tener un PHP que actualice el archivo XML cada vez que se publica un contenido.
- Que el archivo XML sea en realidad un PHP que hace la consulta cada vez que es invocado.
Hoy veremos la segunda opción ya que es un poco más sencilla, aunque la otra es igual (o más) válida aún ya que requiere de menos consultas.
Para esto, lo que haremos será primero definir el header del archivo:
1 | <?php header ("Content-type: text/xml"); ?> |
Luego incluiremos toda la parte “fija” del archivo XML que acabamos de generar y en la parte de los <item> lo que haremos será incluir una consulta que nos traiga los últimos (en ese caso) 20 contenidos desde nuestra base de datos:
Aquí el código final del archivo rss.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php header ("Content-type: text/xml"); ?> <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>Pixelar.me</title> <link>http://pixelar.me</link> <description>Artículos sobre desarrollo web en Español.</description> <language>es</language> <?php include('conexion.php'); // conexión a la BBDD $result = mysql_query ("SELECT * FROM contenidos ORDER BY fecha desc LIMIT 0,20") or die (mysql_error()); while ($row = mysql_fetch_array ($result)) { ?> <item> <title><?php echo $row['titulo'] ?></title> <link><?php echo $row['url'] ?></link> <description><?php echo $row['resumen'] ?></description> </item> <?php } mysql_free_result ($result); ?> </channel> </rss> |
Por último, ¿cómo lo vinculo a mi sitio web?
Para que tu sitio muestre el clásico iconito naranja en la barra de navegación, basta con incluir la siguiente línea en el de nuestra web:
1 | <link rel="alternate" type="application/rss+xml" title="Feed RSS" href="http://pixelar.me/feed/" /> |
Con el href=”" apuntando al archivo que acabamos de generar.
Excelente, pero ¿para qué puede serme útil?
Por ejemplo, si desarrollamos una aplicación de compra en línea (eCommerce) sería interesante poder proveer un feed RSS de nuevos productos a la venta, o la misma idea aplicada a un sitio de ventas inmobiliarias, donde se enviarían via RSS las nuevas propiedades a la venta.
Extensivamente, esto puede ser útil para casi cualquier aplicación que deseemos luego poder recibir novedades desde un lector de feeds; por ejemplo, lo apliqué recientemente en un sistemita para gestión de tareas en el que provee un feed RSS con las tareas que un usuario tiene pendiente, de modo que este usuario pueda tener sus tareas pendientes en un gadget en el escritorio de su PC ;)
Nicolas
14. may, 2010
Una consulta en que plataforma se trabaja en php? gracias
luna
14. ago, 2010
Hola! quisiera preguntar.
Abajo decis que donde dice href=”” tenemos que vincular al archivo que hicimos!
pero antes hay que subirlo a un servidor como feedburner o algo asi? o.o
luna
14. ago, 2010
ahhh y con que extención de archivo se debe guardar el archivo? o.o
Jaguar
17. sep, 2010
¡Muy buen tutorial!
Una cosa; cuando abro el archivo me aparece el código y no una fuente RSS convencional. ¿Es posible enlazar el archivo con FeedBurner para que aparezca de forma convencional?
Alonso Vázquez
17. ago, 2011
Hola oye me pareció muy bueno el artículo, solo que me gustaría señalar que en la línea 3 se debería incluir un echo para que aplicaciones como FeedBurner no lo rechacen a cada rato (lo digo por experiencia jejeje), según yo el código quedaría de la siguiente manera:
<?php header ("Content-type: text/xml");
echo ”; ?>
Muchas gracias por el tutorial :-)
Carlos Arias
08. feb, 2012
Marcelo: sabes como puedo en una web personal en html incrustar un widget que lea rss de mi blog de wordpress??
Marcelo
02. mar, 2012
Hola Carlos, recuerdo que en algún momento yo había usado http://magpierss.sourceforge.net/ que es un PHP parser de RSS (con HTML puro lo veo más dificil, quizá haya algún script JS o similar) ;)