Un Feed dinámico con PHP

publicado el 2007-11-19 por ikki - categoría: Programación

Un Feed dinámico con PHP

Hace unas semanas atrás publiqué un post contándoles qué es un RSS y cuál era su utilidad. Yo mismo uso uno en mi sitio ;). Ahora bien, te pregunto:

  • ¿se puede construir un feed de forma dinámica?
  • ¿te aburre la idea de editar manualmente el archivo xml para añadir cada nuevo post en tu feed?
  • ¿puedo automatizarlo usando PHP?

La respuesta a todas estas interrogantes es , y te mostraré cómo puedes lograrlo con unas pocas líneas de código usando PHP (con MySql, pero aplica con cualquier bd).

Para empezar, he de aclarar que no es necesario que seas un gurú programando en PHP para poder construir tu feed en forma dinámica, simplemente se requiere que al menos tengas cierto nivel de entendimiento del lenguaje ya que la forma en que lo vamos a hacer es bastante sencilla y trataré de ser lo más claro posible para que no te pierdas nada, así que manos a la obra!.

Lo primero que necesitamos es decirle a PHP que el tipo de archivo que estamos construyendo es RSS, y también queremos establecer una conexión a la BD donde se guardan nuestros posts para poder añadirlos a nuestro feed. ¿Cómo me conecto a la base de datos con PHP y Mysql? ¿cómo le digo al servidor que se trata de un feed? Es sencillo:

// le decimos al navegador que es un rss y no un php
header('content-type:application/rss+xml'); 
// este es el servidor donde alojas la BD
$server = "server.tusitio.com"; 
// la base de datos a utilizar
$bd = "mydatabase"; 
// el usuario de la bd
$user = "admin"; 
// el password para conectarse
$password = "very_secret"; 

// me conecto al servidor
$con = mysql_connect($server,$user,$password); 
// ahora conecto a la bd!!
mysql_select_db($bd,$con); 

Una vez que ya establecimos la conexión, hacemos la consulta a la base de datos para obtener la data con la que llenaremos nuestro feed:

// obtenemos la info
$data = mysql_query("SELECT id, titulo, contenido, fecha FROM tabla",$con); 

... y lo que nos queda ahora es construir la estructura xml que contendrá nuestro sitio. Debes saber que este tipo de archivos, los feeds, necesitan estar estructurados con etiquetas ya preestablecidas cuyo uso y explicación puedes encontrar aquí. Sin embargo trataré de aclarar para que sirve cada uno:

// enviamos la versión y codificación del xml
echo "<?xml version='1.0' encoding='UTF-8' ?>\n";
// mostramos la versión del feed (la 2.0 que es la última)
echo "<rss version='2.0'>\n";

// creamos el nodo padre, channel, o el canal de tu feed
echo "  <channel>\n";
// el título de tu página
echo "    <title>My site</title>\n"; 
// el link de tu sitio
echo "    <link>http://www.mysite.com/</link>\n";
// breve descripción del mismo
echo "    <description>Descripción de tu sitio.</description>\n";

// recorremos $data e insertamos su contenido en el feed
while($row=mysql_fetch_row($data)) {
	// insertamos un item
	echo "<item>\n";
	// el título del post
	echo "<title>".$row[1]."</title>\n"; 
	// el id del post
	echo "<link>http://www.mysite.com/post.php?id=".$row[0]."</link>\n"; 
	// fecha
	echo "<pubDate>".date("D, d M Y H:i:s O", strtotime($row[3]))."</pubDate>\n"; 
	// aquí el contenido
	echo "<description>".$row[2]."</description>\n"; 
	// el id del post
	echo "<guid>http://www.mysite.com/post.php?id=".$row[0]."</guid>\n"; 
	// fin del item
	echo "</item>\n"; 
}

// cerramos el canal y finalmente el rss
echo "  </channel>\n"; 
echo "</rss>\n";

Este es el código completo:

<?php
// le decimos al navegador que es un rss y no un php
header('content-type:application/rss+xml'); 
// este es el servidor donde alojas la BD
$server = "server.tusitio.com"; 
// la base de datos a utilizar
$bd = "mydatabase"; 
// el usuario de la bd
$user = "admin"; 
// el password para conectarse
$password = "very_secret"; 

// me conecto al servidor
$con = mysql_connect($server,$user,$password); 
// ahora conecto a la bd!!
mysql_select_db($bd,$con) 

// obtenemos la info
$data = mysql_query("SELECT id, titulo, contenido, fecha FROM tabla",$con); 

// enviamos la versión y codificación del xml
echo "<?xml version='1.0' encoding='UTF-8' ?>\n";
// mostramos la versión del feed (la 2.0 que es la última)
echo "<rss version='2.0'>\n";

// creamos el nodo padre, channel, o el canal de tu feed
echo "  <channel>\n";
// el título de tu página
echo "    <title>My site</title>\n"; 
// el link de tu sitio
echo "    <link>http://www.mysite.com/</link>\n";
// breve descripción del mismo
echo "    <description>Descripción de tu sitio.</description>\n";

// recorremos $data e insertamos su contenido en el feed
while($row=mysql_fetch_row($data)) {
	// insertamos un item
	echo "<item>\n";
	// el título del post
	echo "<title>".$row[1]."</title>\n"; 
	// el id del post
	echo "<link>http://www.mysite.com/post.php?id=".$row[0]."</link>\n"; 
	// fecha
	echo "<pubDate>".date("D, d M Y H:i:s O", strtotime($row[3]))."</pubDate>\n"; 
	// aquí el contenido
	echo "<description>".$row[2]."</description>\n"; 
	// el id del post
	echo "<guid>http://www.mysite.com/post.php?id=".$row[0]."</guid>\n"; 
	// fin del item
	echo "</item>\n"; 
}

// cerramos el canal y finalmente el rss
echo "  </channel>\n"; 
echo "</rss>\n";
?>

Recuerda que este es un archivo php por lo que debes guardarlo con utilizando su extensión (por ejemplo, rss.php). Espero te haya sido de utilidad!! Hasta la próxima!!

Tags: , , ,