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