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! :)
tag: Atom, feed, magpieRSS, parser, PHP, RSS, WordPress.
post correlati:
- Feed completi con il tag more in WordPress
- Sui feed RSS e le date
- L'architettura a plugin di WordPress
- GT Post Approval [WordPress Plugin]
- Eliminare i rel="nofollow" dai link nei commenti di Wordpress
- Spleender Up: per terminare l'importazione di Spleender
- Migrare da Splinder/Motime a Wordpress.com

28 January 2007 alle 15:27
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?
29 January 2007 alle 09:05
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.
16 May 2007 alle 12:49
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
16 May 2007 alle 13:08
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().
3 November 2007 alle 00:44
[…] 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. […]
20 August 2008 alle 21:41
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] =>
)
)