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.
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.
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.
| rss con php Por: fernando | 05/5/2010
|
| genial | 19/5/2010 |
![]() sabrina... | PHP | 19/5/2010 |
| No funciona Por: kyke_mx | 19/5/2010
|
| Los n en las cadenas son saltos de línea | 19/5/2010 |
| Porque no hay respuestas? | 19/7/2010 |
| esto me sirve para hacer un feed rss para un componente de joomla | 22/4/2011 |
![]() delice | error de sintaxis | 01/10/2011 |