Generando feed RSS de noticias en PHP

Valoración del artículo:
Cómo crear un sistema RSS en PHP para publicar la información de las novedades o noticias de nuestro sitio web o blog.
Publicado: 03/2/05
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
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.

Comentarios
Fueron enviados 12 comentarios al artículo
7 comentarios no revisados
5 comentarios revisados:
Por: Tomas
08/4/05
El error se puede arreglar de la siguiente forma:

Cambiar la línea: echo <?xml version="1.0" encoding="iso-88859-1"?>;
Por: echo '<?xml version="1.0" encoding="iso-88859-1"?>';


Notarán que solo agregué las comillas '' al principio y al final, espero que haya sido ese error el que comentan.
Por: manrash
09/6/05
Creo que hay una pequeña errata, la codificación es 8859 y no 88859.
Gracias por el articulo :)
Por: pepeitor
19/3/06
Ya sabemos sacar un FEED desde MySQL con PHP generando un XML-RSS.
Mi Feed enlaza una hoja CSS, por el momento si alguien accede con un navegador no preparado, no ve el código.
Sobre el ejemplo quisiera un modelo con XSLT dando una salida HTML al documento.
http://www.autocasionextremadura.com/catalogo/rss.php
Por: clarinetista
01/12/06
Tambien se deberia cambiar:

echo '<rss version="2.0">

Por:

echo '<rss version="2.0">'
Por: Matías
27/1/07
Hola, la idea del artículo es hacer un seed dinámico, a que me refiero con esto, a que cada vez que lo pidan se genere automáticamente.
A partir de esto ustedes pueden tomar sus propias desiciones, como cargar las noticias, si desde una base de datos, desde un archivo o mediante parsear otros RSS y unirlos todos en uno grandote que resuma todas las noticias.
Se puede usar un poco de lógica, y si en el tutorial no aparece una comilla en el echo (si bien no siempre es necesaria, ver especificación de PHP), la podés agregar a tu criterio.
Se está mostrando que en vez de generar un html dinámicamente, que es lo que generalmente se hace con PHP, tb podés hacer un XML (incluso se puede hacer casi cualquier tipo de archivo, imágenes, animaciones, etc. hasta dónde llegue tu imaginación).
Como el archivo es un sript php, hay que guardarlo como tal, sinó el servidor no lo va a procesar como un php y lo va a mandar directo, no solo quedando expuesto es código fuente, sinó que las noticias no van a llegar.
Recomendaciones:
-Aprender lo básico de PHP en cuanto a escritura (echo, .(concatenación), y las funciones para menejo de cadenas).
-Leer la especificación de RSS (recomiendo la versión 0.9, que no solo es compatible con casi todos los lectores sinó que es la mas sencilla).
-Si manejan bien algún otro lenguaje, hagan una aplicación que genere un archivo XML (no es necesario que lo guarde en disco, lo puede mostrar por pantalla) como los de los RSS y vean como se lo labura, prueben bastante con eso hasta ponerse cacheros con la especificación de RSS en el lenguaje que ustedes manejen (Pascal, C, C++, Java, VB, C#, ADA, etc... Assembler no se los recomiendo).

Si después de pelearla un rato no lo logran hacer andar hey_matias@hotmail.com las 24Hs del día y de la noche.

Manuales relacionados
Categorias relacionadas
El autor
Alejandro Suazo
contador auditor
Últimas noticias
Alojados en el grupo
Copyright | Publicidad | Acerca de | Datos legales | Contacta