SimplePie

SimplePieGoogle ha annunciato la chiusura di Google Reader, il servizio di lettura online di feed RSS.

Costruire un proprio lettore di feed RSS con un linguaggio per il web non è un’impresa titanica e potrebbe anche essere l’occasione per approfondire la conoscenza di un linguaggio.

Noi che siamo geek e programmatori quando ci serve una procedura la scriviamo, non ci lamentiamo perché non esiste.

Se si protegge la procedura con una password di accesso e, magari, dietro un server https (con un certificato auto-emesso o con quelli che si comperano a 10 dollari l’anno), si ottiene un po’ più di tutela della privacy rispetto ad un servizio online. Senza contare che non si dipende più dai tagli dei costi di chi offre il servizio.

Volendo fare un reader in PHP e SQL (ma il SQL non è obbligatorio, se non lo si conosce potrebbe bastare un file di testo salvato sul file system e caricato in un array), si può immaginare una struttura testata-dettaglio a tre livelli (categoria, feed, articolo).

L’acquisizione dei dati da un feed RSS è la parte più pallosa, quindi meglio delegarla ad una libreria già fatta, come l’ottima SimplePie, che si smazza tutta la burocrazia del caso e gestisce anche una cache locale per ottimizzare i tempi di download.

Il codice per scaricare un feed RSS utilizzando SimplePie è molto semplice:

require('simplepie/autoloader.php');
// SimplePie è a oggetti, questo crea un nuovo feed
$feed = new SimplePie();
// specifico la directory della cache...
$feed->set_cache_location('./cache');
// ...e la abilito
$feed->enable_cache(TRUE);
// serve per i feed poco rispettosi della sintassi XML
$feed->force_feed(TRUE);
// $xml contiene l'URL del feed
$feed->set_feed_url($xml);
// il metodo init() applica le impostazioni e legge il feed
if ($feed->init()) {
   // questo loop cicla su tutti gli elementi del feed
   foreach($feed->get_items() as $item) {
      // permalink dell'articolo
      $permalink = $item->get_permalink();
      // titolo dell'articolo
      $titolo = $item->get_title();
      // contenuto 
      $testo = $item->get_content();
   }
}

All’inizio è bene tenere d’occhio la funzione di cache perché con alcuni dei miei feed non riusciva a sentire gli aggiornamenti e ho dovuto disabilitarla. Una volta scritto il codice per scaricare i feed in un database, si possono visualizzare gli articoli prendendo come spunto la struttura di Google Reader, senza dover per forza usare AJAX.

Per evitare di tirare dentro pezzi non desiderati di HTML come script o immagini si possono usare queste due funzioni per sanificare il testo degli articoli:

function strip_single_tag($tag, $string) {
   $string = preg_replace('/<'.$tag.'[^>]*>/i', '', $string);
   $string = preg_replace('/<\/'.$tag.'>/i', '', $string);
   return $string;
}

function strip_single_tag_cont($tag, $string) {
   $string = preg_replace('/<'.$tag.'[^>]*>(.*?)<\/'.$tag.'>/i', '', $string);
   return $string;
}

strip_single_tag() rimuove i tag HTML ma lascia l’eventuale contenuto tra l’apertura e la chiusura del tag. È utile per rimuovere le immagini oppure per togliere alcuni elementi di formattazione lasciando il testo. strip_single_tag_cont() rimuove i tag HTML incluso il testo contenuto tra apertura e chiusura. È utile per rimuovere le parti in JavaScript. Non sono un mago delle RegEx (anzi…), se qualcuno ha metodi più raffinati li può suggerire senza problemi nei commenti.

Gli esempi che accompagnano SimplePie e la documentazione sono molto chiari, quindi non è difficile adattare la libreria alle proprie necessità.

Ovviamente, per evitare problemi di codifica carattere è meglio che la vostra procedura PHP e le eventuali connessioni al database parlino tutte in UTF-8.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

3 pensieri riguardo “SimplePie”

Spazio per un commento