Cómo crear un sistema RSS en PHP para publicar la información de las novedades o noticias de nuestro sitio web o blog.
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.
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