Función para generar RSS

¡Hola gente!

Los RSS son de gran utilidad para compartir información sobre nuestro sitio. El otro día me encontré en una situación en la que necesité generar uno dinámicamente. Busqué en google por el tema, pero no encontré nada… asique decidí compartir esto con ustedes.

/*
 * generates a rss feed. If an item has a key, it will be considered a tag like <$key>$value</$key>. 
 * Otherwise, $value will be placed straight in the rss
 * @author droope <pedro@worcel.com>
 * @param string $encoding the rss' encoding
 * @param array $channelProperties an array such as array('title' => 'Our cool RSS', 'link' => $site_url) 
 * @param array $items an array of arrays containing items and their properties. array(array('title' => 'Why we rule', '<enclosure url="logo.gif" type="image">'), array('title' => 'Lorem ipsum is simply dummy!'));
 * @param bool $output if set to true, headers will be set and rss will be ouptutted to the screen. Otherwise, output will be returned
*/
function rss_generate($encoding, $channelProperties, $items, $output = true) {
	
	$rss_url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
	
	if($output) {
		header("Content-type: text/xml; charset=utf-8");
	}
	$output = '<?xml version="1.0" encoding="'.$encoding.'" ?>
	<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	
	<channel>
	<atom:link href="'.$rss_url.'" rel="self" type="application/rss+xml" />
	';
	foreach($channelProperties as $property => $value) {
		if(!empty($property)) {
			preg_match("/^([\w:]+)(?:\s)?/", $property, $match);
			$closeTag = $match[1];
			$output .= "<$property>$value</$closeTag>";
		} else {
			$output .= $value;
		}
	}
	foreach($items as $item) {
		$output .= "<item>";
		foreach($item as $property => $value) {
			if(!empty($property)) {
				preg_match("/^([\w:]+)(?:\s)?/", $property, $match);
				$closeTag = $match[1];
				$output .= "<$property>$value</$closeTag>
				";
			} else {
				$output .= $value . "
				";
			}
		}
		$output .= "</item>";
	}
	$output .= "</channel></rss>";
	
	if($output) {
		echo $output;
	} else {
		return $output;
	}
	
}

Los RSS generados validan y cumplen todas las recomendaciones de el validador oficial de RSS. Este código ha sido testeado en +-70 sitios y funciona bien. En caso de que encuentre alguna anomalía, recordaré actualizar el código posteado aqui.

¡Espero que sea de utilidad! Feliz generación de RSS con php :D

Un saludo,
Pedro

9 Respuestas a “Función para generar RSS

  1. Muy buena info Pedro…
    En general, todo el blog es muy interesante (llegue por el link en el foro de Puppy Linux).
    Saludos desde el otro lado del charco.
    Gustavo.

    • ¡Hola Gustavo!

      Muchas gracias por tu comentario :) Siempre me encuentro con muchos recursos, y me da gusto poder compartirlos.

      Un abrazo,
      Pedro

  2. Está muy bien, pero tu sabes si se pueden generar feeds desde un blog en wordpress.com, así como este mismo tuyo, para poder insertarlos en un sitio web externo?

      • Agradezco lo rápido que me respondiste.
        Lo que quiero es mostrar por ejemplo, las 5 últimas entradas de una categoría en una página de mi sitio web (html+php). Mi sitio web no tiene absolutamente nada que ver con wordpress.
        Esto es, que se muestre las entradas completas (artículo completo + fotos/vídeos). El RSS mostraría sólo el link asociado a un título.
        Si te fijas en mi sitio http://falcontv.vtrbandaancha.net y le das click a la pestaña “blog” verás que esto lo hago con un iframe, pero no me gusta estéticamente pues no quiero que se vea el encabezado, el nombre del sitio, ni otras columnas que no sea la de las entradas.
        Muchas gracias.

      • hola!

        creo que puedes configurar el contenido del RSS desde las configuraciones de lacuenta en tu dashboard – escritorio – pero no estoy muy seguro donde :)

      • Ok. Voy a proceder a explorar las posibilidades y veré que se puede hacer. Agradezco tu buena disposición para ayudar. Un abrazo y por aquí estaremos para lo que necesites, en serio.

Agrega un comentario! los comentarios se aprueban automaticamente

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