Unnikked - Esperienze personali in campo informatico

Gestire un feed RSS tramite PHP

Con l’avvento dei blog e più in generale dei portali che offrono agli utenti la fruizione di notizie, si è venuta a creare la necessità di definire uno standard per l’interscambio di informazioni. Il formato RSS è uno standard basato su XML che permette di definire una serie di regole per la generazione dei contenuti.

Un esempio di utilizzo dei flussi RSS, sono gli aggregatori online di questo formato, in modo da permettere all’utente di gestire in maniera centralizzata le varie notizie provenienti dai vari portali di informazioni presenti sul web.

Il noto linguaggio di scripting server side PHP fornisce tra le sue varie librerie un insieme di funzioni per la manipolazione dei dati nel formato XML.

In questo articolo useremo la funzione simplexml_load_file che ci permetterà di effettuare facilmente la fase di parsing del documento.

Dal momento che lo standard RSS deriva dal formato XML, la funzione simplexml_load_file ci viene incontro per gestire il formato RSS.

Va segnalato comunque che esistono varie specifiche del formato RSS, in questo articolo non presenterò le varie specifiche presenti sul web ma mi limiterò a proporre un approccio generale applicabile anche ad un generico file XML.

Supponiamo di avere una struttura di un feed RSS del genere:

<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Unnikked - Esperienze personali in campo informatico</title>
		<link>http://unnikked.tk</link>
		<description>Esperienze personali in campo informatico</description>
		<language>it</language>
		<lastBuildDate>13/09/2013 12.46.21</lastBuildDate>
		<item>
			<title>Come impostare i permessi ai file con "chmod"</title>
			<link>http://unnikked.tk/permessi-file-chmod/</link>
			<description>I file e le cartelle in Linux possono avere tre tipi di permessi: lettura ('r'), scrittura ('w') ed esecuzione ('x'). Ogni permesso puo' essere "attivo" o "inattivo" per ogni categoria...</description>
			<author>unnikked</author>
			<pubDate>09/11/2013</pubDate>
		</item>
		<item>
			<title>Impara PHP in 5 minuti</title>
			<link>http://#</link>
			<description>Girovagando su Stumbleupon mi sono imbattuto in una simpatica pagina su cui e' presente un listato che mostra le caratteristiche del linguaggio PHP 5. L'ho trovato molto utile, sintetico ma...</description>
			<author>unnikked</author>
			<pubDate>08/09/2013</pubDate>
		</item>
	</channel>
</rss>

Il seguente frammento di codice mostra uno dei tanti modi per gestire il file XML :

<?php
$simple = simplexml_load_file('feed.rss');
	echo '<a href="'.$simple->channel->link.'">'.$simple->channel->title.'</a><br/><br/>';
	foreach($simple->channel->item as $item) {
		echo '<b><a href="'.$item->link.'">'.$item->title.'</a></b><br/>';
		echo '<p>'.$item->description .'</p>';
		echo '<em>'.$item->author.'</em> - '.date("d/m/Y",strtotime((string)($item->pubDate))) ;
		echo '<br/><br/>';
	}
?>

Il metodo simplexml_load_file restituisce un oggetto di tipo <a title="PHP Documentation - SimpleXMLElement" href="http://www.php.net/manual/en/class.simplexmlelement.php" target="_blank">SimpleXMLElement</a>; tale classe incapsula al proprio interno i nodi del file XML per cui la lettura del metodo è di facile comprensione. Per tanto accedendo ai vari campi della classe (anche in modo gerarchico come si evince dall’esempio) è possibile attraversare la struttura del file XML.

Un esempio di esecuzione dello script è disponibile qui.