Unire due feed rss con SimplePie e PHP

In alcune situazioni risulta molto pratico poter fondere due o più feed rss in modo da facilitarne l’accesso frequente. In questo modo possiamo leggere un unico script e prendere tutti i contenuti.

Una strada percorribile è quella di utilizzare la libreria SimplePie che mette a disposizione diversi strumenti e comandi per unire due è più feed RSS.

Vediamo in pratica come procedere:

Questa prima parte iniziale del file serve per comunicare ai browser il tipo di file che dovranno aspettarsi e quindi come dovrà essere interpretato

[php]<?php echo ‘<?xml version=”1.0″ encoding=”UTF-8″?>’; ?>
<em id="__mceDel"><rss version=”2.00″>
<channel>
<title>Feed Demo</title>
<link>http://www.example.org</link>
<description>
A demo of SimplePie’s feed-merging capabilities.
</description>
<language>it-it</language>[/php]

In questa seconda parte di codice andiamo a richiamare la libreria e a specificare i due feed da fondere più la durata della cache, questo per evitare di dover effettuare l’operazione ad ogni refresh della pagina, il nostro server ce ne sarà grato ;-)

[php]<?php
include_once(‘./lib/php/simplepie.inc’); // Includiamo SimplePie
$feed = new SimplePie(); // Creiamo un’istanza di SimplePie
// Load the feeds
$feed->set_feed_url(array(
‘http://feeds.feedburner.com/Webmaster-source’,
‘http://feeds.feedburner.com/ProbloggerHelpingBloggersEarnMoney’
));
$feed->set_cache_duration (600); // Impostiamo il cache time
$feed->enable_xml_dump(isset($_GET[‘xmldump’]) ? true : false);
$success = $feed->init(); // Inizializziamo SimplePie
$feed->handle_content_type(); // Inviamo il character encoding
?>[/php]

Infine stampiamo l’output di tutte le voci dei due feed secondo la sintassi solita delle regole di un XML RSS standard e chiudiamo gli ultimi tag

[php]<?php if ($success) {
$itemlimit=0;
foreach($feed->get_items() as $item) {
if ($itemlimit==10) { break; }
?>
<item>
<title><?php echo $item->get_title(); ?></title>
<link><?php echo $item->get_permalink(); ?></link>
<description>
<?php echo $item->get_description(); ?>
</description>
</item>
<?
$itemlimit = $itemlimit + 1;
}
}
?>
</channel>
</rss>[/php]

1/5 - (1 vote)