Script php: Leggere un feed rss con php e xml

   difficoltà:  script script script script script

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/>";
}
?>





Commenti


  emmepi14

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

  Fabio

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

  Simona

15/12/2006 14:37:10

Volevo chiedere se questo script funziona anche con i feed atom di Blogger.
Grazie Ciao

  Fabio

15/12/2006 16:09:05

No lo script legge solo i feed rss. Non i feed atom che hanno una struttura diversa.

  Simona

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

  Fabio

15/12/2006 16:50:35

Forse questo ti può essere utile:
parser php


  Olga

26/1/2008 15:55:05

Ciao, ottimo scipt. E' possibile inserire nell'output oltre al titolo anche la descrizione?

Grazie

Olga

  Fabio

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/>";
}


  alessandro

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

  Fabio

10/10/2008 17:59:04

al posto di $item_counter metti il numero di elementi da visualizzare

  alessandro

10/10/2008 18:18:38

grazie 1000,

  andrea

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?

  lore

6/2/2009 14:57:43

grande fabio, hai messo in piedi un gran bel sistema! Ti ringrazio!

  Gigi

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

  Marco

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

  Antonio

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

  matteo

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"

  saverio

25/10/2010 14:51:44

salve. volevo capire come fare a ricevere i feed in automatico senza dover ogni volta riaggiornare la pagina. è possibile fare ciò o devi sempe effettuare una nuova richiesta al file dei feed?

  Andrea

17/9/2011 19:21:55

Interessante e molto utile. Cè la possibilità di leggere 2 o 3 feed rss nello stesso box assieme e stampare gli articoli in ordine di data pubblicazione?



Lascia un commento


Codice di controllo*:
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.