Script PHP para generar un archivo RSS con los registros extraídos de una tabla en base de datos MySQL.
Para las personas que no conozcan RSS y sus aplicaciones recomendamos la lectura del Manual de RSS que hemos publicado en DesarrolloWeb.com. Además, también queremos señalar que existe otro artículo publicado anteriormente en este sitio que también explica cómo generar un RSS desde PHP. El artículo anterior no estaba mal y la idea funciona, pero deja en el aire la posibilidad de hacer un recorrido a una base de datos para generar los registros para el RSS. En cambio, genera una sola entrada en el RSS y además saca los datos de la misma de una manera un tanto "misteriosa".
Para cubrir un poco mejor este asunto, pues la creación de un RSS desde PHP es algo bastante consultado y que merecía la pena ver en nuevos ejemplos más completos, vamos a publicar un script completo que extrae los datos de una tabla MySQL para crear el RSS con varias entradas, que se van generando por medio de un bucle al recorrer la consulta a la base de datos.
Tabla MySQL desde donde vamos a sacar los RSS
Para crear el RSS extraeremos las distintas entradas de una tabla, en una base de datos MySQL. Este sería el create table de la tabla que vamos a utilizar en el código del ejemplo.
CREATE TABLE IF NOT EXISTS `post` (
`id_post` int(11) NOT NULL AUTO_INCREMENT,
`titulo` varchar(100) NOT NULL,
`descripcion` varchar(200) DEFAULT NULL,
`enlace` varchar(120) NOT NULL DEFAULT '',
`tiempo` varchar(15) NOT NULL,
PRIMARY KEY (`id_post`)
);
Además, para que las personas puedan probar este ejercicio de manera más sencilla, aquí hay un enlace a un txt con las sentencias SQL para generar no sólo la estructura de la tabla, sino también los INSERT para dar de alta varios registros. Con esto conseguiremos que la tabla no esté vacía y así el RSS que generemos tenga algunos registros.
Puedes acceder al txt con las SQL para generar la tabla MySQL y los registros de prueba.
Script PHP para generar el RSS
Ahora que ya tenemos una tabla MySQL desde donde extraer los contenidos para nuestro RSS, vamos a ver lo que realmente nos importa en este artículo, que sería la creación del archivo XML para hacer el feed RSS.Este código lo podemos ver a continuación, con diversos comentarios para que se pueda entender con mayor facilidad.
<?php
// Elimina caracteres extraños que me pueden molestar en las cadenas que meto en los item de los RSS
function clrAll($str) {
$str=str_replace("&","&",$str);
$str=str_replace(""",""",$str);
$str=str_replace("'","'",$str);
$str=str_replace(">",">",$str);
$str=str_replace("<","<",$str);
return $str;
}
//creo cabeceras desde PHP para decir que devuelvo un XML
header("Content-type: text/xml");
//comienzo a escribir el código del RSS
echo "<?xml version="1.0""." encoding="ISO-8859-1"?>";
//conecto con la base de datos
$Servidor = "localhost";
$usuario = "root";
$clave = "";
$bbdd = "aplicacionarticulos";
$connectid = mysql_connect($Servidor, $usuario, $clave);
mysql_select_db($bbdd);
//sentencia SQL para acceder a los últimos 20 artículos publicados
$ssql = "select * from post order by tiempo desc limit 10";
$result = mysql_query($ssql);
//Cabeceras del RSS
echo '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">';
//Datos generales del Canal. Edítalos conforme a tus necesidades
echo "<channel>\n";
echo "<title>Novedades de Desarrolloweb.com</title>";
echo "<link>http://www.desarrolloweb.com</link>";
echo "<description>Ejemplo sobre cómo hacer un RSS desde PHP y trayendo los datos desde MySQL.</description>";
echo "<language>es-es</language>";
echo "<copyright>DesarrolloWeb.com</copyright>\n";
//para cada registro encontrado en la base de datos
//tengo que crear la entrada RSS en un item
while ($registro = mysql_fetch_array($result))
{
//elimino caracteres extraños en campos susceptibles de tenerlos
$titulo=clrAll($registro["titulo"]);
$desc=clrAll($registro["descripcion"]);
echo "<item>\n";
echo "<title>$titulo</title>\n";
echo "<description>$desc</description>\n";
echo "<link>" . $registro["enlace"] . "</link>\n";
echo "<pubDate>". date ( "r" , $registro['tiempo'] )."</pubDate>\n";
echo "</item>\n";
}
//cierro las etiquetas del XML
echo "</channel>";
echo "</rss>";
?>
El ejemplo está probado y funciona correctamente, pero si lo editas, ten mucho cuidado de que el formato del XML no se altere, pues en XML cualquier problemilla de sintaxis deriva en un mal reconocimiento del archivo y el RSS no se verá. Por ejemplo, una etiqueta sin cerrar hará que el RSS de un problema y no se vean las novedades. Si finalmente sigues experimentando problemas, accede a la URL comentada en la nota anterior para hacer la descarga del código, que así no debería haber problemas con la transcripción de texto en el artículo.
El RSS que hemos visto aquí no muestra más que las descripciones de los artículos del sitio, si queremos además el contenido completo del artículo tendríamos que hacer alguna modificación e indicarlo todo en una etiqueta <content:encoded> dentro de <item>. Pero esto lo veremos en un artículo más adelante.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...