Creare un FEED RSS con il linguaggio php:
Cenno Feed RSS e XML:
Il linguaggio XML è stato creato da W3C e a differenza dell' HTML deve rispettare alcune regole
ferree, regole che peraltro sono definite dallo stesso programmatore e regolamentate da pagine
di controllo (dtd - Document Type Definition) anch'esse compilate dal programmatore.
In HTML se dimentichiamo un tag aperto la pagina è comunque online, in XML otterremo un errore
che NON consente di visualizzare alcun risultato a video.
I fogli XML non sono altro che tag contenenti altri tag e regolamentati da una regola.
Questo breve cenno serve solo a far capire che un feed RSS deve essere compilato correttamente
in ogni suo aspetto, altrimenti non potremo vedere il risultato a video.
I Feed sono notoriamente associati alle NEWS, ma niente ci impedisce di utilizzare un FEED
per qualsiasi altro tipo di informazione purché legato ad un database.
Il database è fondamentale (anche se non obbligatorio) per estrarre informazioni senza dover
continuamente aggiornare manualmente un FEED (cosa peraltro fattibile).
In questo script analizzeremo come con il linguaggio PHP possiamo creare un FEED RSS che estragga
le ultime informazioni inserite in un database.
UTILITY di correzione feed:
Per correggere i feed appena creati potrete utilizzare uno di questi link:
http://validator.w3.org/feed/
http://feedvalidator.org/
FEED RSS e PHP:
Come abbiamo appena detto un foglio xml deve rispettare delle regole imposte dal programmatore.
Per i FEED le regole sono già state stabilite, noi dobbiamo solo rispettarle.
In questa
pagina
(Inglese) potrete verificare le specifiche RSS 2.0.
PHP: Un feed è scritto con xml e solitamente è generato da un linguaggio dinamico.
Generare un feed con PHP è estremamente semplice, basta dichiarare con la funzione
header
che stiamo per
creare un foglio xml, e successivamente scrivere i tag che lo compongono.
Lo script che stiamo per analizzare crea un Feed RSS 2.0
Script:
Inseriamo lo script ed analiziamolo in seguito (lo script in oggetto è molto simile a quello
utilizzato nella nostra directory, ma non fatevi ingannare dalla lunghezza, creare un feed rss
non è proibitivo).
<?
header("Content-type: text/xml; charset=utf-8");//dichiaro che sto per scrivere una pagina in XML con php
echo ("<rss version=\"2.0\">");//versione rss
echo ("<channel>")//inizio channel
echo ("<title> titolo feed </title>");//titolo rss
echo("<link> http://www.vostrosito.it/index.php </link>");//link rss
echo ("<description> descrizione feed </description>");//descrizione rss
echo "<copyright> Copyright 2006 proprietariocontenuti </copyright>\n";//copiright
echo "<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n";//documento di informazione sulle specifiche dell'rss in oggetto
echo "<managingEditor> email@vostrosito.it </managingEditor>\n";//email del compilatore
echo "<webMaster> email@vostrosito.it </webMaster>\n";//email del webmaster
echo ("<language>IT-it</language>");//linguaggio
$conn=@mysql_connect($host,$vostrouser,$vostrapassword);//le vostre variabili di connessione database
$domanda=mysql_db_query($base,"select * from vostratabella ORDER BY ID DESC LIMIT 50 ",$conn);//estraggo gli ultimi 50 valori inseriti nel database e li ordino per ID (ID o qualunque altro nome colonna che indichi una data di inserimento)
$numrss=mysql_num_rows($domanda);//$numrss è 50, inseriamo comunque un ciclo while di sicurezza
$numrss2=0;
while($numrss2<$numrss){
$primodato=@mysql_result($domanda,$numrss2,"primodato");//primodato, secondodato e terzodato sono un nomi a caso, adesso dovete estarrre tutti i vostri dati dal database
$secondodato=@mysql_result($domanda,$numrss2,"secondodato");
$terzodato=@mysql_result($domanda,$numrss2,"terzodato");
$quartodato=@mysql_result($domanda,$numrss2,"quartodato");
.....
echo "
<item>
<title>".$primodato."</title>";//titolo (con link vedi sotto) della prima informazione rss
echo"<link>http://www.vostrosito.it/vostrapaginanews.php?m=.....</link>";//Link titolo. Potete anche inserire URL dinamici, ma SEMPRE ASSOLUTI (HTTP://www....)
echo"<description>";//Inizio descrizione informazione
echo"<![CDATA[";//Tutto quello racchiuso fra <![CDATA[ e ]]> sarà scritto a video
echo"<font color=\"#C0C0C0\">Articolo:
".$secondodato."
</font>
<br>
<a href=\"http://www.tuosito.it/nomepagina.php?id=".$id."......\">
<img src=\"".$terzodato."\" height=\"75\" width=\"104\"><br>
</a>
]]>";//fine <![CDATA]
echo"</description>";//fine descrizione
echo"<guid>http://tuosito.it/tuagagina.php?articolo=".$primodato."</guid>"; //Inserisci un URL univoco dell'informazione
echo"<category domain=\"http://www.tuosito.it/ nomepaginacategoria.php?id=1&cat=".$quartodato."\"> $quartodato</category>";//Inserisci la categoria dell'informazione
echo"</item>";//fine item
$numrss2++;//aumento $numrss2 per il ciclo while
}
echo "</channel></rss>";//fine channel e rss
?>
Per utilizzare lo script in oggetto ripulitelo dai commenti e variate url e variabili.
Semplifichiamo il tutto:
Per ridurre problemi e dubbi riguardanti lo script sopra citato cercheremo di semplificare la
stesura.
Per prima cosa create un file e salvatelo con il nome
pagina_rss.php
1°) DATI SEMPRE NECESSARI:
da copiare ed incollare nel file
pagina_rss.php.
<?
header("Content-type: text/xml; charset=utf-8");
echo ("<rss version=\"2.0\">");
echo ("<channel>")
echo ("<title> vostro titolo </title>");
echo("<link>http://www.vostrosito.it/index.php</link>");
echo ("<description> descrizione rss </description>");
echo "<copyright> Copyright 2006 proprietario contenuti </copyright>\n";
echo "<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n";
echo "<managingEditor>email@vostrosito.it</managingEditor>\n";
echo "<webMaster>email@vostrosito.it</webMaster>\n";
echo ("<language>IT-it</language>");
Questi dati servono per creare l'impostazione iniziale del vostro feed e sono SEMPRE necessari.
2°) DATABASE:
adesso dovete aprire una connessione con il Vs. database ed estrarre i dati necessari al feed.
$conn=@mysql_connect($host,$vostrouser,$vostrapassword);
$domanda=mysql_db_query($base,"select * from vostratabella ORDER BY ID DESC LIMIT 50 ",$conn);
$numrss=mysql_num_rows($domanda);
$numrss2=0;
while($numrss2<$numrss){
$primodato=@mysql_result($domanda,$numrss2,"primodato");
.....
.....
.....
$numrss2++;
}
Dovete variare le righe nella tabella inserendo le impostazioni di collegamento al Vs. database ed
i dati che vorrete estrarre.
3°) INSERIRE I DATI ESTRATTI NEL FEED:
Nell'esempio sopra abbiamo inserito un ciclo while con delle righe vuote (.....).
Al posto delle righe vuote dobbiamo inserire i dati appena estratti dal database seguendo uno schema
predefinito.
NON inseriremo un esempio ma soltanto lo schema da seguire.
Per verificare guardate nell'esempio iniziale.
SCHEMA Dati RSS (in php)
echo"
<item>
<title> vostro titolo </title>
<link> http://www.vostrolink... </link>
<description> vostradescrizione </description>
<guid> http://www.linkdescrizionefeed... </guid>
<category domain="http://www.linkcategoriafeed...">categoria </category>
</item>
";
Questa riga si ripetarà per ogni riperizione del ciclo while.
Lo schema in oggetto può essere implementato con altri tag, date uno sguardo alle
specifiche
RSS 2.0.
4°) CHIUSURA FEED:
Per chiudere il feed basta copiare le righe sottostanti alla fine del foglio
pagina_rss.php
(sotto la parentesi graffa del ciclo while).
echo"
</channel>
</rss>
";
?>
ERRORI:
In XML come in altri linguaggi ci sono alcune parole riservate, ed alcune regole sintattiche da
rispettare.
XML non transige come l'html su tali regole e pertanto è opportuno rispettarle per eliminare gli
errori a video o la mancata visualizzazione del feed.
La funzione riportata di seguito vi aiuta a ripulire il testo estratto dal database per renderlo
idoneo all'XML.
function puliscirss($dato){
$dato=html_entity_decode(strip_tags($dato));
$dato=utf8_encode(ltrim(rtrim(str_replace(array(">","<","\"","\n","\r","\t","<br />","<br>","<BR>"," "," ")," ",$dato))));
$dato=str_replace(array("&"),"e",$dato);
return $dato;
}
Inserite questa funzione all'inizio del foglio e richiamatela ogni volta che estraete un dato
dal database.
La riga nell'esempio:
$secondodato=@mysql_result($domanda,$numrss2,"secondodato");
diventa:
$secondodato=puliscirss(@mysql_result($domanda,$numrss2,"secondodato"));