Parsing di un Feed RSS con PHP

Nella guida di oggi vediamo come effettuare il parsing (lettura ed elaborazione) di un feed RSS grazie all’utilizzo di PHP.

L’esplosione esponenziale del web con la nascita di Blog, portali, siti web, di vario tipo ha portato ad avere un flusso sempre maggiore di informazioni. In questo breve articolo introduttivo vi mostro, dato un comune feed rss, ad elaborarlo in modo da ottenere specifiche informazioni.

Partenza: Creiamo un RSS di test

Il punto di partenza è un comune file XML rss che potete reperire ormai in qualsiasi sito web.

<?xml version="1.0" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>TITOLO DEL FEED</title>
<link>http://www.urlsitofeed.com/</link>
<description>DESCRIZIONE DEL SITO</description>
<language>it-IT</language>
<lastBuildDate>Mon, 01 Dec 2000 00:00:00 +0100</lastBuildDate>
<item>
<title>TITOLO ARTICOLO 1</title>
<description>DESCRIZIONE DELL'ARTICOLO1</description>
<link>http://www.urlsitofeed.com/pagina-articolo1.html</link>
<pubDate>Mon, 01 Dec 2000 00:00:00 +0100</pubDate>
</item>
<item>
<title>TITOLO ARTICOLO 2</title>
<description>DESCRIZIONE DELL'ARTICOLO2</description>
<link>http://www.urlsitofeed.com/pagina-articolo2.html</link>
<pubDate>Mon, 01 Dec 2000 00:00:00 +0100</pubDate>
</item>
<item>
<title>TITOLO ARTICOLO 3</title>
<description>DESCRIZIONE DELL'ARTICOLO3</description>
<link>http://www.urlsitofeed.com/pagina-articolo3.html</link>
<pubDate>Mon, 01 Dec 2000 00:00:00 +0100</pubDate>
</item>
</channel>
</rss>

Se non sai di cosa sto parlando ti consiglio di leggere qui e qui.

Sviluppo: Elaboriamo il feed con PHP

Per prima cosa andiamo a creare una funzione php che potremo richiamare in qualsiasi momento. Passiamo alla funzione la variabile URL relativa al file xml che vogliamo analizzare.

function ElaboraFeed($url){

Per prima cosa, leggiamo il contenuto dell’url e inizializziamo il file XML in modo da poter usare le informazioni lette con il primo passaggio.

$getfile = file_get_contents($url);
$xml = new SimpleXMLElement($getfile);

Ora andiamo a creare due array distinti in quanto ogni feed è composto da informazioni e articoli. Le informazioni sono relative al feed, mentre gli articoli saranno i vari items veri e propri.

$feed_info = array();
$feed_art = array();

Per accedere alle varie informazioni dovremo agire sui channel generati nella variabile $xml:

$xml->channel->title // titolo del feed
$xml->channel->link; // link feed
...
$xml->channel->item // Items del feed

Andiamo a comporre gli array con le informazioni che ci servono prelevate dal feed

//Compongo array INFORMAZIONI DEL FEED
$feed_info['titolo_feed'] = $xml->channel->title;
$feed_info['link_feed'] = $xml->channel->link;
$feed_info['descrizione_feed'] = $xml->channel->description;
$feed_info['lingua_feed'] = $xml->channel->language;
$feed_info['last_upd_feed'] = $xml->channel->lastBuildDate;

//Compongo array ARTICOLI DEL FEED
$i = 0; //inizializzo a 0 una variabile indice
foreach($xml->channel->item as $item)
{
$feed_art[$i]['titolo_articolo'] = $item->title;
$feed_art[$i]['descr_articolo'] = $item->description;
$feed_art[$i]['data_articolo'] = $item->pubDate;
$feed_art[$i]['link_articolo'] = $item->link;
$i++;
}

//Volendo, ri-assemblo il feed completo
$total = array_merge($feed_info,$feed_art);
print_r($total);

Stampiamo ora a schermo gli array in base alle informazioni di cui abbiamo bisogno

foreach ($feed_info as $key => $value) {
	echo "<p>".$key." - ".$value."</p>";
	echo "<hr />";
}

foreach ($feed_art as $key => $value) {
	echo "<p>Titolo: ".$value['titolo_articolo']."</p>";
	echo "<p>Descrizione: ".$value['descr_articolo']."</p>";
	echo "<p>Data: ".$value['data_articolo']."</p>";
	echo "<p>Link:".$value['link_articolo']."</p>";
	echo "<hr />";
}

Ovviamente a questo punto potete facilmente usare le informazioni come meglio credete. Ultimo passo, lanciate la funzione passando il link al vostro feed:

//Elabora
ElaboraFeed('feedtest.rss');

Enjoy!

Codice completo elaborazione feed RSS

<?php
function ElaboraFeed($url){
$getfile = file_get_contents($url);
$xml = new SimpleXMLElement($getfile);

$feed_info = array();
$feed_art = array();

$feed_info['titolo_feed'] = $xml->channel->title;
$feed_info['link_feed'] = $xml->channel->link;
$feed_info['descrizione_feed'] = $xml->channel->description;
$feed_info['lingua_feed'] = $xml->channel->language;
$feed_info['last_upd_feed'] = $xml->channel->lastBuildDate;

$i = 0; #inizializzo a 0 una variabile indice
foreach($xml->channel->item as $item)
{
$feed_art[$i]['titolo_articolo'] = $item->title;
$feed_art[$i]['descr_articolo'] = $item->description;
$feed_art[$i]['data_articolo'] = $item->pubDate;
$feed_art[$i]['link_articolo'] = $item->link;
$i++;
}

$total = array_merge($feed_info,$feed_art);
//print_r($total);

foreach ($feed_info as $key => $value) {
	echo "<p>".$key." - ".$value."</p>";
	echo "<hr />";
}

echo "<br />";echo "<br />";
foreach ($feed_art as $key => $value) {
	echo "<p>Titolo: ".$value['titolo_articolo']."</p>";
	echo "<p>Descrizione: ".$value['descr_articolo']."</p>";
	echo "<p>Data: ".$value['data_articolo']."</p>";
	echo "<p>Link:".$value['link_articolo']."</p>";
	echo "<hr />";
}

}//Elabora Feed

//Elabora
ElaboraFeed('feedtest.rss');
?>

Conclusione e Sviluppi

Questo articolo ti è servito? Condividilo sui tuoi social network preferiti oppure, se hai qualche idea su come migliorarlo commenta qui sotto!

[symple_divider style=”solid” margin_top=”20px” margin_bottom=”20px”]

[symple_column size=”one-half” position=”first”]

Targetweb ti è utile? Offrimi un Caffè e sostieni questo progetto!

[donationdownloads id=”10″]

[/symple_column]

[symple_column size=”one-half” position=”last”]

Non vuoi donare niente? 🙁 Scarica comunque condividendo questo articolo sui tuoi social preferiti:

[viral-download file1=”http://www.targetweb.it/download/2014/rss-parse.zip” name1=”Scarica lo script!” url=”http://www.targetweb.it/parsing-feed-rss-php/” message=”Per scaricare il file completo devi condividere l’articolo su un social network. ” tweet=”#PHP- Parsing di un feed RSS: Ecco come fare” thankyou=”Grazie per aver condiviso, clicca sul link qui sotto:”/]

[/symple_column]

[symple_divider style=”solid” margin_top=”20px” margin_bottom=”20px”]

0 0 voti
Valutazione dell'articolo
Iscriviti
Notificami
guest

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

1 Commento
Vecchi
Più recenti Le più votate
Feedback in linea
Visualizza tutti i commenti
Francesco Schiano
Francesco Schiano
5 anni fa

Waww, spiegato in un modo super facile cose che altri avrebbero impiegato 10 pagine, bravo.
Quello che sto cercando, e che non trovo da nessuna parte, come fare un form di ricerca per cercare un titolo in un file rss (xml) inserendo una parola in un search box.
Un po come si farebbe normalmente cercando in un database sql. Sarebbe il massimo ottenere anche una paginazione oppure limitare i risultati a un numero tot.

Rimani Aggiornato
Nuove idee, zero Spam
Ti invieremo solo le ultime novità di articoli o nostri progetti.
Iscrivendoti accetti la nostra privacy poliicy. Una volta iscritto, ricordati di attivare l'iscrizione cliccando sul link ricevuto via mail.
1
0
Esprimete la vostra opinione commentando.x