> Manuales > Manual de RSS

Cómo crear un sistema RSS en PHP para publicar la información de las novedades o noticias de nuestro sitio web o blog.

Muchas veces nos hemos preguntado como generar feed RSS para nuestros blogs o sistema de noticias. Al igual que muchos, yo pensaba que era una tarea más que dura, pero con observación y un poco de ingenio todo se puede. A continuación explicaré una de las formas de generar RSS para nuestros sistemas. Necesitaremos que nuestras noticias se recojan de una base de datos.

El XML a veces es complejo de entender, para mi aún lo es, pero como dije: Con ingenio todo es posible. Lo primero es saber: ¿Qué etiquetas ocupan las distintas versiones de RSS?, pues fácil, nos vamos a algún sitio que genere dichos RSS, por ejempo, un Blog y miramos el código fuente de dicho RSS. Ya tenemos aproximadamente el 90% del "trabajo" hecho, solo falta el código de nuestro documento en PHP. Hay que tener claro que el XML permite que creemos nuestras propias etiquetas, las que veremos a continuación, podemos tomarlas como standar para los feeds.

Nota: Este artículo funciona, pero hay unos matices importantes que comentar. Para empezar hace un amago de traerse la información de una base de datos para generar el RSS, pero realmente luego no saca nada de la base de datos. Otra cosa que está faltando es el recorrido por medio de un bucle para generar varios registros al RSS. Todas estas faltas hacen que el artículo no sea del todo completo. Agradecemos a Alejandro Suazo haberlo enviado para su publicación, pero nos quedan pendientes varias cosas importantes

Para mejorar el presente artículo hemos publicado un script PHP que hace todos los pasos que faltan a éste, como son la conexión con la base de datos, la consulta y la extracción de los registros del RSS en un bucle. Todo esto lo podéis ver en el Artículo completo para la creación de un RSS desde PHP y con base de datos MySQL.

Para el ejemplo se utilizará RSS 2.0:

<?
header('Content-Type: text/xml'); //Indicamos al navegador que es un documento en XML
//Versión y juego de carácteres de nuestro documento
echo '<?xml version="1.0" encoding="iso-8859-1"?>';
//Aquí la conexión o archivo de conexión a la base de datos
//Hacemos la consulta y la ordenamos por post para mostrar siempre el último
$resultado=mysql_query("select * from noticias order by id_post Desc",$link);
$row=mysql_fetch_array($resultado);
//"Cortaremos" el artículo en 300 caracteres para nuestra descripción
$descripcion=substr($row[articulo],0,300)."...";
// Y generamos nuestro documento
echo '<rss version="2.0">
<channel>
    <title>Nombre de nuestro blog o web</title>
    <link>http://www.miurl.com/</link>
    <language>es-CL</language>
    <description>Descripción de nuestro blog o web</description>
    <generator>Autor del RSS</generator>
    <item>
<title>'.$row[titulo].'</title>
<link>http://www.miurl.com/noticias.php?id='.$row[id_post].'</link>
<comments>http://www.miurl.com/comentarios.php?id='.$row[id_post].'
</comments>
<pubDate>'.$row[fecha].'</pubDate>
<category>'.$row[categoria].'</category>
<guid>http://www.miurl.com/comentarios.php?id='.$row[id_post].'</guid>
<description><![CDATA['.$descripcion.']]></description>
<content:encoded><![CDATA['.$row[articulo].']]></content:encoded>
</item></channel></rss>';
?>


Podemos ver que la estructura del documento es sencilla y hasta repetitiva. Básicamente podemos dividirlo en dos: <channel> e <item> en donde <channel> contiene a <item>. El primer bloque antes de <item> se llena con los datos de nuestro blog o web, luego bajo la etiqueta mensionada van los datos del post o noticia a mostrar

Una práctica sana es utilizar la etiqueta <content:encoded>, para proporcionar la información que contiene nuestro artículo completo en vez de <description> ¿por qué?, porque los sistemas de recopilación de feeds o lectura de estos, leen la etiqueta <description> para darle al lector un resúmen de lo que trata el post. Lo menciono, porque hay sistemas de blog que usan <description> para generar la información del artículo completo y no dan la opción de ver si queremos o no seguir leyéndo lo que nos ofrecen, aparte de ocupar espacio. Para estas dos etiquetas usamos la sección XML<![CDATA]]>(character data), básicamente para que el XML no interprete ciertos caracteres como propios de su lenguaje y trate de ejecutarlos.

Por último decirles, que deben cerrar bien todas las etiquetas del documento o noticia a la que se le hará feed, o dará un hermoso error de parseo.

En cuanto al script, se le pueden dar más opciones (aunque esto es lo básico), como por ejemplo: Hacer un while luego de <item> y mostrar todas las noticias, o la cantidad que quieras, usándo limit en la llamada a la base.

De nuevo recomendamos, para solucionar algunos de los fallos y faltas de este artículo, realizar la lectura de las mejoras en la creación de RSS desde PHP.

Alejandro Suazo

contador auditor

Manual