Script php: Leggere un feed rss con php e xml
difficoltà:

Script simili
25/9/2006
Vediamo ora come utilizzare uno degli script che si trovano più frequentemente in rete per leggere file xml con php, per leggere un feed rss e riportare sul proprio sito internet i link agli ultimi post di un blog o di un website.
Vediamo per esempio come importare sul proprio sito gli ultimi 10 script pubblicati su free-script.it.
Questo script usando xml_parser_free parsa il file xml. Nella variabile $filename inseriamo l'indirizzo del feed rss. Il file a cui punterà sarà un file xml valido (non facciamoci confondere dal fatto che l'estensione del file sia .php poichè il Content-type del file è text/xml).
<?
$filename="http://www.free-script.it/feed/feed.php";
if( ! ($fp = fopen( "$filename" , "r" )) ){echo "Impossibile aprire il file xml!";}
$item_counter = 0;
$item_data = array();
$xml_current_tag_state = '';
function startElementHandler( $parser, $element_name, $element_attribs ){
global $item_counter;
global $item_data;
global $xml_current_tag_state;
$xml_current_tag_state = $element_name;
}
function endElementHandler( $parser, $element_name ){
global $item_counter;
global $item_data;
global $xml_current_tag_state;
$xml_current_tag_state = '';
if( $element_name == "ITEM" ) {
$item_counter++;
}
}
function characterDataHandler( $parser , $data ){
global $item_counter;
global $item_data;
global $xml_current_tag_state;
if( $xml_current_tag_state == '' ) {
return;
}
if( $xml_current_tag_state == "TITLE" ) {
$item_data[$item_counter]["title"] = $data;
}
if( $xml_current_tag_state == "LINK" ) {
$item_data[$item_counter]["link"] = $data;
}
}
if( !($xml_parser = xml_parser_create()) ){
die("Impossibile creare l' XML parser!");
}
xml_set_element_handler($xml_parser, "startElementHandler", "endElementHandler");
xml_set_character_data_handler($xml_parser, "characterDataHandler");
$data = stream_get_contents($fp);
if( !xml_parse($xml_parser, $data, feof($fp)) ){
break; // esce dal loop quando finisce
}
xml_parser_free($xml_parser);
for( $i=0 ; $i < $item_counter ; ++$i ){
echo "<a href='".$item_data[$i]["link"]."'>".$item_data[$i]["title"]."</a><BR/>";
}
?>
Permalink:
Tag:
Script Simili:
Script ajax: Caricare su Google maps coordinate da xml o feed rss con georss
Script php: Leggere file xls di excel con php
Script php: Leggere mail da account pop3 con php
Script asp: Leggere il contenuto di un file remoto
Link utili:
Vota:
Commenti
29/9/2006 9:50:54
Ciao,
lo script puoi usarlo per leggere qualunque file rrs o anche altri file xml.
Per leggere file xml o feed formattati in modo diverso devi modificare lo script sopra in questo modo:
Nella funzione endElementHandler() al posto di
$element_name == "ITEM"
devi controllare nel file xml come si chiama il nodo che contiene i record e inserirlo al posto di ITEM.
Nella funzione characterDataHandler() sostituisci
$xml_current_tag_state == "TITLE"
$xml_current_tag_state == "LINK"
con tutti i nodi che desideri estrarre dal feed.
Facciamo finta tu abbia un file xml così formato:
<prodotto>
<nome></nome>
<marca></marca>
</prodotto>
<prodotto>
<nome></nome>
<marca></marca>
</prodotto>
avrai:
$element_name == "prodotto"
....
if( $xml_current_tag_state == "nome" ) {
$item_data[$item_counter]["nome"] = $data;
}
if( $xml_current_tag_state == "marca" ) {
$item_data[$item_counter]["marca"] = $data;
}
per visualizzare i risultati dovrai poi fare un ciclo sull'array $item_data.
Spero di esserti stato d'aiuto
15/12/2006 14:37:10
Volevo chiedere se questo script funziona anche con i feed atom di Blogger.
Grazie Ciao
15/12/2006 16:09:05
No lo script legge solo i feed rss. Non i feed atom che hanno una struttura diversa.
15/12/2006 16:31:43
Esiste allora uno script di php che permettere di leggere gli ultimi 3 post scritti nel blog su piattaforma blogger? Grazie
15/12/2006 16:50:35
Forse questo ti può essere utile:
parser php
26/1/2008 15:55:05
Ciao, ottimo scipt. E' possibile inserire nell'output oltre al titolo anche la descrizione?
Grazie
Olga
27/1/2008 11:40:49
@ Olga:
Certo, dopo:
if( $xml_current_tag_state == "TITLE" ) {
$item_data[$item_counter]["title"] = $data;
}
aggiungi:
if( $xml_current_tag_state == "DESCRIPTION" ) {
$item_data[$item_counter]["description"] = $data;
}
e al posto di:
for( $i=0 ; $i < $item_counter ; ++$i ){
echo "<a href='".$item_data[$i]["link"]."'>".$item_data[$i]["title"]."</a><BR/>";
}
metti :
for( $i=0 ; $i < $item_counter ; ++$i ){
echo "<a href='".$item_data[$i]["link"]."'>".$item_data[$i]["title"]."</a><BR/>";
echo "$item_data[$i]["description"]."<BR/>";
}
10/10/2008 17:31:16
ciao, ottimo script mi hai dato una salvata incredibbile, però scusa avrei una domanda da farti e possibile inserire un limite massimo di righe visibili nella lettura del feed???
grazie
10/10/2008 17:59:04
al posto di $item_counter metti il numero di elementi da visualizzare
13/10/2008 15:55:51
ciao,
sto cercando un lettore php dei feed di blogger, ho provato col tuo codice ma non funziona!
Puoi aiutarmi?
28/8/2009 11:21:04
Ciao Fabio,
ho provato lo script, maad esempio con i feed RSS di Ansa o AdnKronos è lentissimo e addirittura l'host remoto non risponde.
Puoi fare una prova?
Grazie,ciao
27/12/2009 18:16:11
Ciao, sto utilizzando il tuo script ma ho dei problemi quando nei feed ci sono alcuni caratteri come:
&
ü
Mi puoi dare una mano? Grazie
23/3/2010 13:11:40
Complimento per lo script, però ho dei problemi con i file XML senza il CDATA come questo: http://www.ied.it/Corsi/courses_rss.xml
Come posso modificare lo script per leggere anche questo XML?
Grazie
22/6/2010 14:58:52
Ciao ottimo script funziona alla perfezione ho solo 2 problemini.
1-) e' possibile limitare il numero di elementi visualizzati a 5 o ad un numero qulasiasi?
2-) In un titolo ho il segno - e invece di visualizzare come titolo "Unity e Ubuntu Light – Screenshots, caratteristiche e installazione" visualizzo "– Screenshots, caratteristiche e installazione"

Feed Rss
29/9/2006 8:52:03
buongiorno. ottimo script, ma qualcuno sa dirmi per cortesia come posso adattarlo per leggere anche altri rss formattati in modo differente?
Grazie