Semplice parser in PHP

Utilizzando la classe MagpieRSS, vediamo come realizzare un semplice parser in PHP che ci consenta di leggere un feed RSS o Atom, caricarne il contenuto in memoria ed elaborare in modo rapido e semplice le informazioni.

<?php

/**
 * Esempio di un semplice parser in PHP
 * utilizzando la classe MagpieRSS.
 *
 * @version $Id$
 * @copyright 2005
 */

require_once('rss_fetch.inc');

isset($_GET['url']) ? $url = $_GET['url'] : $url = '';

if ($url) {
$rss = fetch_rss($url);
echo "<h1><a href=\"". $rss -> channel['link'] ."\">".
$rss -> channel['title'] ."</a></h1>";
echo "<p>". $rss -> channel['description'] ."</p>"; 
echo "<h2>News:</h2>";
echo "<ul>";

foreach ($rss -> items as $feed) {
echo "<li>".
"<a href=\"". $feed['link'] ."\">". $feed['title'] ."</a><br />".
"<small>". $feed['description'] ."</small>".
"</li>";
}

echo "</ul>";
}

?>
<form name="frmFeed" method="get">
<p>
Feed URL: <input type="text" name="url" value="<?php $url ? print $url : print "http://" ?>" /> <input type="submit" name="submit" value="Carica Feed" /> </p> </form>

Analizziamo passo passo lo script.

require_once('rss_fetch.inc');

isset($_GET['url']) ? $url = $_GET['url'] : $url = ''; 

Come prima cosa è necessario includere la classe. E' possibile usare una qualsiasi tra le direttive di inclusione in PHP ma è raccomandato l'uso di require o require_once per evitare che l'esecuzione proceda senza aver caricato la classe.

In seguito eseguiamo un controllo sul valore dell'URL. Se presente valorizziamo la variabile $url con il percorso.

if ($url) { 
$rss = fetch_rss($url);

Se è disponibile l'URL di un feed possiamo procedure con il fetching del file e l'assegnazione del contenuto alla variabile $rss.
A preoccuparsi di questa fase molto importante ci pensa MargpieRSS. E' sufficiente fornire un URL valido e richiamare il metodo fetch_rss() passando il percorso come parametro, per ricevere in cambio un oggetto feed completamente popolato dei contenuti del file.

Nel nostro caso l'oggetto feed è rappresentato dalla variabile $rss.
Ora che il contenuto del file è stato caricato, possiamo elaborare le informazioni a nostro piacimento.

Stampiamo il titolo del feed collegandolo alla sua sorgente

echo "<h1><a href=\"". $rss -> channel['link'] ."\">".
$rss -> channel['title'] ."</a></h1>";
echo "<p>". $rss -> channel['description'] ."</p>"; 

e procediamo con l'elaborazione dei singoli elementi.

Anche in questo caso MagpieRSS ci semplifica notevolmente la vita.
Tutte le news sono inserite in un array all'interno dell'oggetto feed che è sufficiente scorrere con un semplice ciclo.

echo "<h2>News:</h2>"; 
echo "<ul>"; 
foreach ($rss -> items as $feed) { 
echo "<li>".
"<a href=\"". $feed['link'] ."\">". $feed['title'] ."</a><br />". 
"<small>". $feed['description'] ."</small>". 
"</li>";
} 
echo "</ul>";

Decidiamo che per ogni news l'output prodotto deve contenere il titolo collegato all'URL completo e, a seguire, la descrizione presente nel feed.

Siamo alla fine. Creiamo un semplice form HTML che ci consenta di inserire un URL ed inviarlo al parser.

<form name="frmFeed" method="get"> 
<p> 
Feed URL:
<input type="text" name="url" value="<?php $url ? print $url : print "http://" ?>" />
<input type="submit" name="submit" value="Carica Feed" />
</p> 
</form>

Per un esempio live potete testare la demo dello script.