Come leggere feed RSS e Atom con WordPress e la classe PHP MagpieRSS

Leggere un feed RSS (0.9, 1, 2) o Atom con Wordpress è relativamente facile, in quanto la distribuzione di default comprende il set di classi PHP MagpieRSS (modificate e raggruppate dal team di WordPress) che costituiscono appunto un parser per questi formati XML di Syndication.

Ecco uno snippet per stampare in un tema un elenco puntato con gli ultimi sette bookmark salvati in del.icio.us e presi da un feed RSS (in questo caso il formato del feed è l’RSS 1 - RDF Site Summary - locato all’URL http://del.icio.us/rss/lit, che è quello del mio account):

<?php
// Include nel tema il file wp-includes/rss-functions.php
  require_once(ABSPATH . WPINC . "/rss-functions.php");

// Inizializza la classe e prende il feed RSS
  $feedRSS = @fetch_rss("http://del.icio.us/rss/lit");

// Verifica che ci siano item nel feed RSS
  if(isset($feedRSS->items) && 0 != count($feedRSS->items)){
?>

// Crea un elenco puntato con gli item del feed RSS
<ul>
  <?php
    foreach($feedRSS->items as $k => $tag){
// Limita il numero di item da mostrare a 7.
      if($k==7) break;
      echo "<li><a href='$tag[link]'>$tag[title]</a></li>";
      if($tag['description']) echo " - $tag[description]</li>";
      else echo "</li>";
    }
  }
  ?>
</ul>

MagpieRSS prevede anche un sistema di caching che di default è attivo. Quindi lo script non prende il feed ogni volta che una pagina viene visualizzata, ma allo scadere della cache, che di default dura 1 ora.

Se vogliamo aumentare la durata della cache, dobbiamo definire la constante MAGPIE_CACHE_AGE con la durata in secondi della cache, prima del richiamo al metodo fetch_rss():

// require_once(ABSPATH . WPINC . "/rss-functions.php");

// La cache durer�  un giorno (24 ore * 60 minuti * 60 secondi = 86400)
define('MAGPIE_CACHE_AGE', 86400);

// $rss = @fetch_rss("http://del.icio.us/rss/lit");
// ecc...

Se poi volte sapere quali dati potete ricavare da un feed un semplice metodo è l’uso della funzione print_r() di PHP:

<pre>
<?php
// Include nel tema il file wp-includes/rss-functions.php
  require_once (ABSPATH . WPINC . "/rss-functions.php");

// Inizializza la classe e prende il feed RSS
  $feedRSS = @fetch_rss("http://del.icio.us/rss/lit");

// Le informazioni sul feed:
  print_r($feedRSS->channel);

// Gli elementi degli items:
  print_r($feedRSS->items);

?></pre>

Se non utilizzate WordPress la procedura non è molto diversa, ci ha scritto un tutorial Simone Carletti: Semplice parser in PHP.

Buon divertimento con le vostre sidebar! :)

Hai trovato interessante questo articolo? Se vuoi, inscrivendoti alla newsletter, puoi ricevere una notifica ogni volta che c'è un nuovo articolo da leggere, oppure puoi sottoscrivere il feed RSS. Se non sai cos'è puoi leggere: Cos'è e come si legge un feed.
di Francesco Terenzani, 18 December 2006

post<li>

tag: , , , , , , .

post correlati:


Commenti (6). Commenti in formato RSS

  1. disordinementale scrive:

    Ciao!
    Premetto che non conosco php.
    Ho provato ad utilizzare il tuo codice, in locale sulla mia macchina va egregiamente, ma in rete no.
    Non mi segnala alcun problema, semplicemente non scrive nulla sulla pagina. Credo che @fetch_rss non valorizzi la variabile, facendo saltare il ciclo.

    Come posso fare?

  2. Francesco Terenzani scrive:

    Ciao, puoi provare ad eliminare il simbolo @ davanti a fetch_rss e vedere se ti da qualche messaggio di errore (quel simbolo davanti ad una funzione serve per nascondere i messaggi di errore).

    Comunque, se non ricordo male, su Altervista sono disabilitate le socket, credo sia quello il problema. Quindi se vai ad esempio nella bacheca del tuo pannello di amministrazione, probabilmente non vedrai i link in ingresso e le varie news, dato che vengono prese nello stesso modo spiegato qui.

  3. vittorio scrive:

    ciao, mi chiedevo: ma se voglio fare un aggregatore che aggreghi feeds proveniente da più siti web e che vengano ordinati per data?
    con gli esempi che trovo si possono prendere i feed solo da un sito per volta.
    Grazie
    vittorio

  4. Francesco Terenzani scrive:

    Forse ti conviene appogiarti ad un database. Salvi gli item e poi per visualizzarli fai una query al database.

    Se lo vuoi fare al volo magari potresti popolare un array che abbia come indici le date degli item (magari passati alla funzione strtotime()) e poi ordinare l’array con ksort().

  5. Pingback: disordinementale » Blog Archive » mannaggia al cURL module.

    […] Dopo la cocente delusione di ieri sera (quando dopo 3 ore di smanettamenti mi sono accorto che il mio hosting non ha il cURL module attivato) ritorno alla ribalta con un codicillo trovato qua. […]

  6. Alex scrive:

    Come risultato degli elementi dell’rss mi da questi…Nel reader rss posso inserire qualsiasi elemento, tra il “creator”, che è proprio quello che mi interessa!! Sapete mica aiutarmi?
    Grazie ^^

    Array
    (
    [title] => Titoloblog
    [link] => http://url.net
    [pubdate] => Fri, 15 Aug 2008 17:19:33 +0000
    [generator] => http://wordpress.org/?v=2.6
    [language] => it
    [tagline] =>
    )
    Array
    (
    [0] => Array
    (
    [title] => Hello world!
    [link] => http://url.net/2008/08/15/hello-world/
    [comments] => http://url.net/2008/08/15/hello-world/#comments
    [pubdate] => Fri, 15 Aug 2008 17:19:33 +0000
    [dc] => Array
    (
    [creator] => admin
    )

    [category] => Uncategorized
    [description] =>

    [content] => Array
    (
    [encoded] =>

    )

    [summary] =>

    [atom_content] =>

    )

    )

Scrivi un commento

XHTML: Puoi usare questi tag XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>