Sistema RSS en PHP para publicar información de nuestro 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.

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

Via: Desarrolloweb.com