Estás mirando la versión 3 de mi sitio web, para ver la última versión por favor anda a juque.cl

juque

Juan Pablo Aqueveque: Ingeniero de Sistemas, Diseñador y Desarrollador Web que reside en Temuco, Chile.

juqueRSS: Generador RSS con PHP

Publicado por Juan Pablo el 25.Ene.2005 | Comentarios (8)

Con una creciente frecuencia nos topamos con aquel botón naranjo. Sí, la sindicación de contenido crece con mucha fuerza. Existen muchos lectores y parser's para RSS, pero son escasos los script o clases para generarlo. juqueRSS es un pequeño y fácil script en PHP que genera un archivo RSS versión 1.0 dinámicamente a partir de la consulta a una Base de Datos MySQL.

¿Por qué RSS 1.0 y no 2.0?

Simple, RSS 1.0 es un formato de sindicación conforme a RDF que es un lenguaje de propósito general basado en XML aprobado y ampliamente difundido por la W3.org. La versión 2.0 es un formato promovido por una empresa independiente, UserLand.

Anatomía de un RSS versión 1.0

Árbol RSS versión 1.0

Antes de generar un archivo RSS, primero debemos entender su estructura que básicamente es:

<rdf> 
 <channel/> 
 <item/> 
 <item/> 
 <item/> 
</rdf>

Línea por línea

La primera línea de un archivo RSS declara el estandar XML y la codificación que éste tendrá:

<?xml version="1.0" encoding="iso-8859-1"?>

El elemento raíz (<rdf:RDF>) contiene las declaraciones de namespace que serán usadas en el documento, éstas le dirán al analizador sintáctico (parser) que también usaremos vocabulario de aquellas comprobadas URL's.

<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">

La siguiente línea comienza con el elemento channel .

<channel rdf:about="URL que identifica en canal">

El channel necesita de subelementos:

El subelemento item (línea 23), es donde la sindicación tiene efecto, éste contiene:

Ejemplo completo de un archivo RSS 1.0

	<?xml version="1.0" encoding="iso-8859-1"?>

	<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">

	<channel rdf:about="http://www.juque.cl/demos/juquerss/index.php">
	<title>juqueRSS en Acción!</title>
	<link>http://www.juque.cl/</link>

	<description>Generador RSS usando PHP, por juque</description>
	<dc:language>es</dc:language>
	<items>
	<rdf:Seq>
	<rdf:li rdf:resource="http://url1" />

	<rdf:li rdf:resource="http://url2" />
	<rdf:li rdf:resource="http://url3" />
	</rdf:Seq>
	</items>

	</channel>
	
	<item rdf:about="http://url1">
	<title>titulo1</title>
	<link>http://url1</link>

	<description>descripcion1</description>
	<dc:date>2005-01-23T23:40:00-03:00</dc:date>
	</item>
	
	<item rdf:about="http://url2">

	<title>titulo2</title>
	<link>http://url2</link>
	<description>descripcion2</description>
	<dc:date>2005-01-23T23:47:41-03:00</dc:date>

	</item>
	
	<item rdf:about="http://url3">
	<title>titulo3</title>
	<link>http://url3</link>

	<description>descripcion3</description>
	<dc:date>2005-01-23T23:47:51-03:00</dc:date>
	</item>
	</rdf:RDF>

No es tan feo ni inteligible como parece verdad?, es claro y ordenado. Veamos ahora algunos aspecto complementarios.

El idioma

El idioma (línea 12) del documento está definido por dc:language, que puede ser español (es) o inglés (en). Si quieres otros idiomas, dale una mirada a la ISO 639 que contiene todos los códigos de idiomas existentes.

El formato de fecha

La fecha de cada item (lineas: 27,34,41) debe contener un formato estándar, como era obvio es el estandar de la w3.org:

YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)

Donde:

juqueRSS

Hecho el latoso pero necesario preámbulo de como llegué a descifrar los misterios del RSS, presento mi script generador de RSS usando PHP y MySQL.

Configuración

Se edita el archivo config.php con nuestro editor favorito, que por supuesto es VIM . Por mucho tiempo he usado la abstracción de base de datos de PHPlib y esta vez no fue la excepción, así que debes configurar la extensión de la clase, lo que sigue es muy intuitivo.

/*
Configuración de la BD
- - - - - - - - - - - - - */ 
class mysql extends DB_Sql
{
	var $Host     = "localhost";
	var $Database = "";
	var $User     = "";
	var $Password = "";
}
$TablaRSS = "rss";
/*
Configuracion archivo de
sindicacion (RSS)
- - - - - - - - - - - - - */ 
$Codificacion = "iso-8859-1";
/* Alternativa: UTF-8 */

$Canal = "http://www.juque.cl/demos/juquerss/index.php";
/* URL que origina el RSS */

$TituloCanal = "juqueRSS en Acción!";
/* Evidente, el titulo del canal */

$LinkCanal = "http://www.juque.cl/";
/* URL del sitio que origina el RSS */

$DescripcionCanal = "Generador RSS usando PHP, por juque";
/* Evidente#2, describe tu canal */

$IdiomaCanal = "es";
/* Alternativa: en */

$GMT = "-03:00";
/* Tiempo estandar de tu lugar de residencia. Mas info en www.timeanddate.com */

Base de Datos

La base de datos contiene la siguiente estructura, que dicho sea de paso también he incluido en el .zip de descarga.

CREATE TABLE rss (
id int(11) NOT NULL auto_increment,
url varchar(64) NOT NULL default '',
titulo varchar(64) NOT NULL default '',
fecha datetime NOT NULL default '0000-00-00 00:00:00',
descripcion varchar(127) NOT NULL default '',
PRIMARY KEY  (id)
)

Correr

Cuando ya tenemos debidamente configurado juqueRSS sólo resta subirlo al servidor, correr el archivo SQL rss.sql en la BD y apuntar la dirección (URL) con nuestro lector RSS o bien darle una mirada con nuestro navegador.

DEMO y Descarga

Como de costumbre he habilitado un DEMO del resultado esperado y la descarga del mismo.

Crédito

Para documentar esta entrada me ayudé del libro Content Syndication with RSS de Ben Hammersley, publicado en marzo del 2003, ISBN 0-596-00383-8.

Para cualquier pregunta o problema con el script, por favor comenta esta entrada y así dejar registro.

Actualización: Pequeña mejora al script

Enlace Permanente, Comentarios (8), Publicada en: PHP

TrackBack

Weblogs que han referenciado la juqueRSS: Generador RSS con PHP:

» Tutorial: generando feed RSS para blogs o sistemas de noticias de Triple 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 ...

[continuar leyendo]

Comentarios

1. Hermann
25.Ene.2005

Muy útil, la próxima vez que tenga que generar un feed RSS te robo el código :D

2. jgarcía
26.Ene.2005

Estupendo artículo. Muy trabajado y bien expuesto. ¡Enhorabuena!

3. tholos
26.Ene.2005

Excelente. Si bien entendí la mitad (con suerte), es una gran ayuda para continuar mi estudio de este tema que, por lo demás, hace rato me quita el sueño y que tampoco es mi fuerte. :)

4. hyoga
26.Ene.2005

Buena explicación. Parece que voy a seguir usufurctuando de tus inventos.

Una consulta: ese módulo ¿esta basado en el backend.php de PHP-Nuke? ¿o lo escribiste de cero?

Digo, por pequeñas vulnerabilidades que tienen este tipo de CMS.

5. juque
26.Ene.2005

hyoga: Tranquilo, el script está íntegramente desarrollado por este servidor, desde la primera línea hasta la última.

6. ..
26.Ene.2005

¿Bajo que licencia está publicado ese código?

¿GPL? ¿LGPL? ¿BSD? ¿Haz lo que quieras con el código? ¿Haz lo que quieras con él pero mencioname?

7. juque
26.Ene.2005

#6: Nunca me he detenido a evaluar el tipo de licencias de mis script. Con la sola mención de mi autoría y sitio web quedo conforme. Mi intención es sólo compartir mi limitado conocimiento.

8. Funk
27.Ene.2005

Hola Jp, felicitaciones por el código!. Recordás mas o menos por fines de octubre del año pasado cuando andaba desesperado buscando exactamente esto ya que tenia que armar con PHP y MySQL un generador RSS para sindicar noticias de un sitio de automovilismo?, no sabía como carajo hacerlo y vos me lo pasaste por mail, era mas complicado pero me sirvió en su momento y lo pude aplicar, este que hiciste vos esta mucho mas sencillo y legible, lo pienso poner en práctica.

Suerte :)