09 de septiembre de 2010 ¡Bienvenid@! / Welcome! Añadir a favoritos

Cómo crear los feeds para tu web (RSS 2.0) con php

21 de julio de 2008 - 7303 lecturas - 13 comentarios - Categorías: Diseño web, HTML, PHP. - Posteado por David Bayón.

Si no sabes qué son los feeds, tal vez lo mejor sea que comiences haciendo clic aquí, para salir de dudas. La mayoría de herramientas para la gestión de blogs (wordpress, blogger...) crean los feeds de forma automática, pero... ¿qué ocurre cuando queremos hacer los feeds de una web creada "a mano", que no utilice estás utilidades? Un portal donde se publiquen periodicamente noticias, por ejemplo, o un blog programado por uno mismo (como es mi caso). A continuación explico cómo llevarlo a cabo fácilmente.

Tenemos que conseguir este resultado (puedes hacer clic derecho y seleccionar ver el código fuente), para lo que es necesario un archivo con el siguiente aspecto (sólo habrá que modificar lo que aparece en color verde). Justo a continuación explico cómo conseguirlo.

<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><![CDATA[título de tu web]]></title>
<link><![CDATA[http://www.tuweb.com]]></link>
<description><![CDATA[descripción MUY BREVE de tu web]]></description>
<language>es-es</language>
<copyright><![CDATA[tu nombre y apellidos, por ejemplo]]></copyright>
<atom:link href="http://www.tuweb.com/rss.php" rel="self"
type="application/rss+xml" />
<ttl>15</ttl>

<image>
<url>http://www.tuweb.com/logo.png</url>
<title>título de tu web</title>
<link>http://www.tuweb.com</link>
</image>

<item>
<title><![CDATA[título del elemento]]></title>
<link><![CDATA[url completa del elemento]]></link>
<description><![CDATA[descripción del elemento]]></description>
<guid isPermaLink="true"><![CDATA[url completa del elemento]]></guid>
<author><![CDATA[email_del_autor@tuweb.com (email del autor)]]></author>
<pubDate><![CDATA[Sat, 19 Jul 2008 04:00:53 +0200]]></pubDate>

</item>

(...Con tantos items como queramos mostrar...)
</channel>

</rss>

Para realizarlo debemos seguir los siguientes pasos:

1) Crear un archivo php vacío, por ejemplo rss.php , que lo utilizaremos para generar los feeds.

2) Lo rellenamos con el siguiente contenido, modificando lo que aparece en letra verde negrita por la información de tu proyecto concreto:

<?php
header("Content-Type: application/rss+xml"); 
echo("<?xml version="1.0" encoding="iso-8859-1"?>");
?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> 
<channel>
<title><![CDATA[título de tu web]]></title>
<link><![CDATA[http://www.tuweb.com]]></link>
<description><![CDATA[descripción MUY BREVE de tu web]]></description>
<language>es-es</language>
<copyright><![CDATA[tu nombre y apellidos, por ejemplo]]></copyright>
<atom:link href="http://www.tuweb.com/rss.php" rel="self"
type="application/rss+xml" />
<ttl>15</ttl>

<image>
<url>http://www.tuweb.com/logo.png</url>
<title>título de tu web</title>
<link>http://www.tuweb.com</link>
</image>

/* Aquí debemos conectarnos a la base de datos, */

/* Obtener los diferentes items e incluirlos */
/* adecuadamente mediante un bucle "for". */
/* Lo explico en el "paso 3". */
</channel>
</rss>

3) En la zona señalada anteriormente con marcas de comentario (/* ... */) debemos hacer lo siguiente:

Nota: Todas las funciones podemos introducirlas en un archivo denominado funciones_auxiliares.php

3.1) Nos conectamos a la base de datos:

include ("funciones_auxiliares.php");
$bbdd = nuestra_base_de_datos;
$link = conectarse($bbdd);

3.2) Obtenemos el contenido que vamos a mostrar en los items de la base de datos y lo introducimos en un array:

$elementos = DevuelveElementosRSS($link);
/* elementos es un array del estilo:
elemento[0] = id_elemento1;
elemento[1] = titulo_elemento1;
elemento[2] = fecha_elemento1;
elemento[3] = primer_parrafo_elemento1;
elemento[4] = id_elemento2;
elemento[5] = titulo_elemento2...*/

3.3) Le damos el formato adecuado mediante un bucle for:

for ($bb=0;$bb<100;$bb=$bb+4){
$indice_id = $bb;
$indice_titulo = $bb+1;
$indice_fecha = $bb+2;
$indice_primer_parrafo = $bb+3;

$enlace = "http://www.tuweb.com/index.php?id_elemento=$elementos[$indice_id]";
$fecha = DevuelveFechaParaFeeds($elementos[$indice_fecha]);

/* "imprimimos cada item: " */
echo("<item>");
echo("<title><![CDATA[$elementos[$indice_titulo]]]></title>");
echo("<link><![CDATA[$enlace]]></link>");
echo("<description><![CDATA[$descripcion]]></description>");
echo("<guid isPermaLink="true"><![CDATA[$enlace]]></guid>");
echo("<author><![CDATA[email_del_autor@tuweb.com (email del autor)]]></author>");
echo("<pubDate><![CDATA[$fecha]]></pubDate>");
echo("</item>");
}

4) Puedes ver los dos archivos finales en estos enlaces: rss.php y funciones_auxiliares.php

5) Para que aparezca en la barra del navegador el icono de que tu web soporta feeds rss (ver imagen) debes incluir la siguiente línea en negrita en la cabecera (head) del index:

 

<head>
....
<link href="rss.php" rel="alternate" type="application/rss+xml" title="RSS tuweb.com" />
....
</head>

Si tienes alguna duda ¡recuerda que puedes plantearla en los comentarios de este post! ;)

Nuevo comentario:
Nombre*.
E-mail*. (no será publicado)
Blog o página web (http://...).

Comentario*:


(* Campos necesarios)
Comentarios anteriores:
Autor: Marian
Fecha: 18/12/2009 (09:07)
Comentario:

Hola, muy muy muy buen post. Lo he puesto en práctica y funciona todo perfecto, pero no puedo acceder al archivo "funciones_auxiliares.php" desde el link de esta página, por lo que no consigo que me aparezca la información.¿Qué funciones se necesitan? ¿Hay otra manera de descargarse el archivo?
Muchas gracias por explicarlo todo tan bien.
Saludos.


Autor: Tere
Fecha: 27/11/2009 (20:38)
Comentario:

Hola, excelente feed, me funciona bien, solo quiero saber como le haces para poner el favicon en tu rss porque yo no logro encontrar como hacerlo.

Mil gracias.


Autor: Bruno
Fecha: 27/9/2009 (20:57)
Comentario:

Hola me parecio un excelente post, ahora mi siguiente pregunta es como puedo crear feeds automaticos reemplazando las fechas de mis post por fechas mas actuales o en el caso de exportar mi base de datos en xml y automatizar esa tarea con php.

Saludos y desde ya muchas gracias


Autor: Aneury Gonzalez
Fecha: 28/8/2009 (20:57)
Comentario:

saludos desde Rep. Dominicana
muchas gracias, me funciono a la perfeccion solo con la fecha tengo problema. Me aparece una fecha asi
jueves 1 enero de 1970 si puedes me ayudas a resolverlo. Gracias Mil gracias...


Autor: Ramiro
Fecha: 14/8/2009 (21:33)
Comentario:

Al Igual que David me he encontrado con el mismo problema, dentro de el TAG description existe texto y un TAG IMG de html. Existe alguna forma de individualizarlos? He hecho funciones y pude sacar las imagenes, pero no el texto. Si quieres te las subo.
Muy bueno el articulo! =)


Autor: Fernando Plascencia
Fecha: 26/7/2009 (19:48)
Comentario:

Ayuda!!! Hahaha
Soy un novato webmaster y necesito toda la ayuda posible por favor!!
No entendi muy bien el articulo aunque se que es lo mas corto y facil posible
RinconDelChemo@hotmail.com

saludos!


Autor: Nicolas
Fecha: 19/3/2009 (19:16)
Comentario:

Hola soy Nicolás de Uruguay y me sirvio mucho tu articulo. te felicito por el blog

saludos!! garcias


Autor: David Bayón
Fecha: 21/1/2009 (18:36)
Comentario:

zetero, ¿en qué LÍNEAS te da el error exactamente? ¿Estás seguro de que obtienes correctamente los elementos de tu base de datos?

Si no eres un poco más riguroso en tus consultas no te puedo ayudar.

Un saludo.


Autor: zetero
Fecha: 21/1/2009 (15:45)
Comentario:

oe men , me tira error el codigo de rss.php

lo stoy editando en el dreamweaver y me webea

q el rss y el chanel no estan cerrados, y tambien cuando "se emprimen los ITEMs"

echo("");

no cacho q vola?????????????????????

ayuda porfa



Autor: zertero
Fecha: 21/1/2009 (14:41)
Comentario:

al pasarlo a algun editor (dreamweaver)

tira error en codigo....... , no el codigo dentro de este.(marca como error en el codigo escrito a continuacion)

???? no me funciona





..................
.............................




Autor: nagato
Fecha: 16/12/2008 (12:54)
Comentario:

necesito ayuda para hacer esto, yo estube haciendo estos pasos, pero en el paso 3 me trabo, nose como hacerlo, alguien me explica? mi mail es josem_cler@hotmail.com

Autor: David Bayón
Fecha: 15/10/2008 (18:20)
Comentario:

David,

Por lo que me cuentas tu problema se encuentra en la lectura de los feeds y no en la creación de los mismos, que es de lo que trata este post.

Ese es un tema con el que todavía no he podido ponerme, por falta de tiempo, luego aún no puedo ayudarte. Tengo pendiente realizar un artículo sobre la lectura de feeds desde php. Te invito a que vuelvas a revisar mi blog en los próximos días.

Un saludo!


Autor: David
Fecha: 15/10/2008 (09:47)
Comentario:

Hola,

tengo una duda a la hora de extraer la información. Cuando leo el tag description me encuentro que pueden haber tags de imágenes pero al extraer la información con el simplexml_load_file() se carga el tag img y los que haya.

¿Sabes alguna manera de poder mantener los tags, sobretodo los img?

Muchas gracias


ActualidadInformáticaTelecomunicacionesTiempo libre
  • Economía
  • Opinión
  • Política
  • Tecnología
  • Diseño web
  • Hardware
  • Seguridad informática
  • Software
  • Antenas
  • Redes informáticas
  • Telefonía
  • Televisión
  • Tratamiento digital de señal
  • Curiosidades
  • Deportes
  • Espectáculos
  • Humor
  • Música
  • Películas
  • Reflexiones
  • Viajes
  • Portada
  • ¿Qué es DavidBayon.net?
  • Perfil profesional
  • Perfil personal
  • Contáctame
  • Archivos
  • Libro de visitas
  • Enlaces
  • Ir arriba
    Creative Commons License Esta obra es propiedad de David Bayón Esporrín y está bajo una licencia de Creative Commons. Se puede reproducir el contenido citando la fuente y colocando un enlace en un lugar visible a su ubicación original en DavidBayon.net.