Como crear un feed RSS con MySQL y PHP


Hola este es el segundo tip que escribo relacionado a lo que es PHP y MySQL cabe mencionar que mis conocimientos son algos básicos en algunas cosas, sin embargo lo que se y he aprendiendo lo comparto con ustedes, el ejemplo que les pondré a continuación esta basado en un ejemplo que desarrollo Alejandro Suazo, es uno de los ejemplos más difundidos aunque contiene algunos errores de escritura y  sintaxís, todos ellos los e arreglado y el ejemplo ya esta  funcional,  espero les sirva como me ha servido a mi.

Para empezar entendamos primero que es RSS:  El feed RSS es un sencillo formato de datos que es utilizado para redifundir contenidos a suscriptores de un sitio web. El formato permite distribuir contenido sin necesidad de un navegador, utilizando un software diseñado para leer estos contenidos RSS (agregador). A pesar de eso, es posible utilizar el mismo navegador para ver los contenidos RSS. Las últimas versiones de los principales navegadores permiten leer los RSS sin necesidad de software adicional.

Existen 3 formatos de RSS :

RSS (0.91) Rich Site Summary

RSS (0.0 y 1.0) RDF Site Summary

RSS (2.0) Really Simple Sindication

Para mas informacion sobre el RSS, pueden visitar la pagina de Wikipedia.

¿Cómo creamos el documento RSS?

Es muy sencillo crear un documento RSS ya que en si es un archivo XML.

  • El archivo debe comenzar indicando la versión de XML y la codificación. En este caso  utilizo codificación “iso-8859-1“.
  • A continuacíon añadimos las etiquetas de apertura y cierre <rss></rss> e indicamos la versión del tipo de documento  y después tendremos que crear un canal donde vamos a publicar nuestros contenidos .
  • Los tres elementos siguientes son obligatorios en todo feed RSS e identifican a nuestra feed y a nuestro sitio web. En primer lugar indicaremos el título de nuestro sitio, a continuación especificamos la url donde se puede encontrar nuestra feed RSS y por último una breve descripción de lo que se puede encontrar en nuestro sitio.
  • Después de las tres líneas anteriores añadiremos un elemento item por cada entrada que vayamos a incluir en nuestro feed.
  • Cada item consta de tres elementos obligatorios:
    • title. Que contiene el título del artículo.
    • link. Que contiene el enlace directo a la versión completa del artículo. De esta forma los suscriptores interesados podrán leer el artículo completo.
    • description. Que contiene un resúmen de lo que encontraremos en el artículo.

    Y varios elementos opcionales, de los cuales utilizo únicamente dos:

    • pubDate. Que indica la fecha de publicación del artículo.
    • category. Que contiene el nombre de la categoría al que pertenece el artículo.

<?xml version=”1.0″ encoding=”iso-8859-1″ ?>
<rss version=”2.0″>
<channel>
<item>
<title>
El título de mi artículo 1</title>
<link>http://www.miweb.es/miArticulo1.htm</link>
<description>Resúmen del artículo 1</description>
<pubDate>Lun, 2 Dic 2009 11:56:26 GMT</pubDate>
<category>Mi categoria 1</category>
</item>
</channel>
</rss>

Ya que tenemos más o menos claro lo que es RSS podemos poner manos a la obra y empezar a crear nuestro feed de noticias para nuestra página web.

Manos a la obra

Base de datos
El primer paso será crear la base de datos y añadir los datos. Si nuestra página ya utiliza algún tipo de base de datos para guardar los artículos no será necesario crear otra base de datos ni tampoco hacer cambios, solamente necesitaras adecuar el script a tus necesidades.

  • id_noticia – no es obligatorio pero a mi en lo particular me gusta manejar por números los registros
  • autor – nombre del autor que publica las noticias
  • titulo – título que veremos en el RSS
  • categoria –categoría o tag del articulo (nos permitirá organizar mejor)
  • fecha – fecha del articulo para la organización (los más nuevos son los primeros)
  • noticia – nuestros artículos se guardaran en este campo

Esta sería la estructura SQL para facilitar un poco el como funciona este ejemplo:

CREATE TABLE IF NOT EXISTS `noticias` (
`id_noticia` int(4) NOT NULL auto_increment,
`autor` varchar(255) default NULL,
`titulo` varchar(255) default NULL,
`categoria` varchar(255) default NULL,
`fecha` date NOT NULL,
`noticia` text,
KEY `id_noticia` (`id_noticia`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

Para utilizar los datos genere un archivo llamado conexion donde almacenamos la información de nuestra BD.

Archivo: conexion.php

<?php
function Conectarse()
//conectamos a la base
if (!($link=mysql_connect(“servidor”,”usuario”,”contraseña”)))
{
echo “Error conectando a la base de datos.”;
exit();
}   //Seleccionamos la base
if (!mysql_select_db(“base_de_datos”,$link))
{
echo “Error seleccionando la base de datos.”;
exit();
}
return $link;
}
?>

Ya que tenemos nuestra tabla en nuestra base de datos, vamos a empezar a ver el script que nos genera nuestro Feed de noticias.


Archivo:  rss.php

<?php

//Indicamos a php que lo que estamos por crear es un archivo XML
header
(‘Content-type: text/xml; charset=”iso-8859-1″‘, true);

//y como todo archivo XML debemos definirlo de esta manera:
echo
‘<?xml version=”1.0″ encoding=”iso-8859-1″?>‘;

//Aquí la conexión o archivo de conexión a nuestra base de datos
include
(“conexion.php”);
$link=Conectarse();

//Hacemos la consulta y la ordenamos por id para mostrar siempre el último
$resultado=mysql_query(“select * from noticias order by id_noticia Desc”,$link);

//”Cortaremos” el artículo en 300 caracteres para hacer nuestra descripción
$descripcion=substr($row[noticia],0,300).”…”;

// Generamos nuestro documento
echo ‘<rss version=”2.0″>’;
echo ‘<channel>
<title>Nombre de nuestra web</title>
<link>http://www.miurl.mx/</link&gt;
<language>es-CL</language>
<description>Descripción de nuestro blog</description>
<generator>Autor del RSS</generator>’
;

//Creamos un while para poder generar todos los extractos de noticias de nuestro sitio

while($row = mysql_fetch_array($resultado)){

echo<item>
<title>’
.$row[titulo].‘</title>
<link>noticias.php?id=’
.$row[id_noticia].‘</link>
<pubDate>’
.$row[fecha].‘</pubDate>
<category>’
.$row[categoria].‘</category>
<description><![CDATA[
.$row[noticia].‘]]></description>
</item>
‘;
}//cerramos el while
echo

//Cerramos nuestras etiquetas channel y rss
</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 mencionada 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.

Hay que tener cuidado al cerrar bien todas las etiquetas.

Para hacer accesible tu canal RSS debes de poner un enlace a tu archivo desde tu página web.
Bastará con que insertes una línea como la que se muestra a continuación en el código HTML de la página en la que quieras que aparezca el enlace:

Nota: Recordar poner siempre type="application/rss+xml" en el enlace.

<a type="application/rss+xml" href="rss.php"><img src="icono_rss.gif"></a>

También debemos incluir lo siguiente entre las etiquetas <head> de nuestras páginas:

<link rel="alternate" type="application/rss+xml" title="My RSS Feed" href="rss.php" />

De esta forma los navegadores (al menos los más utilizados, Firefox e Internet Explorer, en sus últimas versiones) detectarán que nuestro sitio tiene un feed RSS 2.0 y mostrarán un icono a los visitantes de nuestro sitio en la barra de direcciones para suscribirse directamente, en algunos navegadores viejos no se visualiza bien los feed, o también puede que tu servidor no reconozca este tipo de archivos.

Espero les sirva este tip, se que hay muchas formas de hacerlo, pero a mi en lo particular me a funcionado,  cualquier duda o sugerencia y con gusto les responderé.

Saludos

Como crear un feed RSS con MySQL y PHP

22 comentarios en “Como crear un feed RSS con MySQL y PHP

  1. vikerweb dijo:

    Wow. Esto sí es un artículo en condiciones y perfectamente explicado.

    Ya era hora de que alguien pusiera un código en condiciones.

    Cuando tuve que crear un feed me volví loco con la cantidad de informacion desordenada que pululaba/pulula por la red.

    Saludos.

    1. Muchas gracias por lo que comentas, así es, existe mucha información pero toda esta revuelta y poco entendible y muchos ejemplos tienen errores, lo único que hice fue juntarla y darle un orden para que todos los que vamos empezando le entendamos sin ningún problema.

      Espero te sirva de referencia este ejemplo.

      Un saludo @vikerweb

      1. hola todo iva bien hasta cuando copio el codigo y lo pego en el dreamweaver para editarlo me cambio aparecieron algunos errores por ejemplo “ y deberia ser: ”

        y hay muchos mas caracteres con error… si tienes el codigo en un archivo podrias enviarmelo please

  2. flashreloco:

    Felicitarte, muy buenos temas en general.

    Te comento que tengo problemas con las fechas a la hora de validar el documento, ya que estas se visualizan tan como se registran en mysql o sea 2010-10-25 y lo correcto es Mon, 25 Oct 2010 19:50:00 GMT, según el validador. La pregunta es: como se logra el resultado correcto? Lo cierto es que no soy un genio con php y se me dificulta esto de las fechas, he probado con varios ejemplos pero sin el resultado que necesito.

    Desde ya muchas gracias y se te agradece el tiempo que dedicas a todos tus temas.

    Saludos cordiales

    1. Hola Larry, pues mira hay varias de logar ese resultado ya sea creando una función y asignarles como quieres que presente esos datos o en su caso hacer uso de las funciones de PHP, que para mi creo es la forma más fácil, te dejo un ejemplo de como se utilizaría, usando la función date, esto es rescatando la fecha de tu BD.

      Para más ejemplos de su uso puedes checarlo en esta página: http://mx2.php.net/manual/en/function.date.php

      Espero te sirva de algo, saludos.

  3. Gracias por presentarnos este buen artículo destacable por su utilidad, sencillez y precisión.

    Siempre hemos pensado y en tu caso así se demuestra, que la grandiosidad de internet es ofrecer gratuitamente una “enciclopedia” de conocimientos escrita con la pluma de la generosidad y altruismo de muchas personas.

    1. Hola Jesus, deja voy a sacar el ejemplo y lo voy a dejar descargable.

      Para que lo puedan estudia, ya que me han comentado que cuando copian y pegan las comillas tanto dobles como sencillas no funcionan como debieran.

      Saludos

  4. Hola. bien explicado, pero no me queda claro una cosa. he creado un archivo feed.xml y ahora necesito saber como conectar al feed? ósea como debo hacer que el contenido aparezca a traves de url. www. dominio. com. /feed.xml

    Me explico?

  5. Pri dijo:

    Muchas Gracias por la documentación, pero no comprendo porque me da este error

    No se puede mostrar la página XML
    No se puede ver la entrada XML con la hoja de estilo XSL. Corrija el error y haga clic en el botón Actualizar o inténtelo de nuevo más tarde.

    ——————————————————————————–

    Sólo se admite un elemento de nivel superior en un documento XML. Error al procesar el recurso http://localhost:9080/proyec

    <table class='xdebug-error xe-notice xe-scream' dir='ltr' border='1' cellspacing='0' cellpadding='1'…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s