Crear un feed RSS dinámico

Crear un feed RSS dinámico

Fecha: 19-Abr-2010 | Autor: .
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):

<?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:

<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:

<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í:

<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í:

<?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:


¿Por qué este anuncio?
  1. Tener un PHP que actualice el archivo XML cada vez que se publica un contenido.
  2. 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:

<?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:

<?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:

<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 ;)


Si te gustó, comparte:
Y si fue de ayuda, puedes comprarme un café:
...ó la cena si quieres! ;)

Etiquetado como: , , , ,


Gravatar

Marcelo


Desarrollador web, trabajando desde Montevideo, Uruguay para todo el mundo. Me especializo en Diseño web, Maquetación HTML5 & CSS3, jQuery y Programación PHP & MySQL, e intento aprender un poco más cada día.

9 comentarios, participa!

  1. Nicolas

    14. May, 2010

    Una consulta en que plataforma se trabaja en php? gracias

  2. 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

  3. luna

    14. Ago, 2010

    ahhh y con que extención de archivo se debe guardar el archivo? o.o

  4. 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?

  5. 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 :-)

  6. 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??

  7. 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) ;)

  8. Juan Carlos

    08. Nov, 2013

    Hola Marcelo,
    Despues de muchas horas de busqueda encontre una solucion clara en este post.
    Simplemente queria darte las gracias.

  9. Luis Barcel

    02. Jul, 2016

    Gracias Genio, me salvaste la vida!

Deja tu opinión