Generando feed RSS de noticias en PHP

03 de febrero de 2005
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.
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.

Compartir en redes sociales

Comentarios
Fueron enviados 13 comentarios al artículo
8 comentarios no revisados
5 comentarios revisados:
Por: Tomas
08/4/2005
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/2005
Creo que hay una pequeña errata, la codificación es 8859 y no 88859.
Gracias por el articulo :)
Por: pepeitor
19/3/2006
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/2006
Tambien se deberia cambiar:

echo '<rss version="2.0">

Por:

echo '<rss version="2.0">'
Por: Matías
27/1/2007
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
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...