Non ho trovato un modo semplice per ricevere periodicamente le news RSS via mail.
L’obiettivo è quello di avere ogni giorno nella casella mail le news (non già precedentemnte inviate).
Attraverso le funzioni xml di php5 e md5() ho creato al volo uno scriptino essenziale che sembra funzionare.
Per ogni url dell’array $urls
- processo la url e ricavo titolo, link e descrizione (testo) delle news della fonte
- se una news non è già stata inviata (*) la accodo nel body da inviare nella mail e flaggo che la news è stata inviata (*)
- creo la mail con oggetto=nome fonte, corpo in html. Invio
(*) identificazione coppia (fonte, news) attraverso il controllo di esistenza del file di nome = md5(url) contatenato a md5(titolo) . Questo garnatisce che una news venga inviata una sola volta.
Ovviamente bisogna montare lo script in modo che parte ogni X ore, magari con un demone da qualche parte o chiamandolo manualmente.
copio il codice sotto:
<? include ("include/xml.php");
$urls = array("http://sprite.csr.unibo.it/feed_csr/",
"http://punto-informatico.it/fader/pixml.xml",
"http://punto-informatico.it/fader/doxml.xml"
);foreach ($urls as $url)
{
$nomefilexml = "rss_temp/".md5($url).".xml";
copywithcache($nomefilexml, $url , $_GET['force']? 0 : 3600);$xml = simplexml_load_file($nomefilexml); /* print_r($xml); */
if (!$xml)
print "<li>Informazioni al momento non disponibili</li>";
else
{
$body = "";
foreach($xml->channel->item as $item)
{
//if ($xmluktrend++>5) break;
//$item->link
//$item->description
//$item->title
$nomefile = "rss_temp/".md5($url).md5($item->title);
if (!file_exists($nomefile) || $_GET['force'])
{
$body .= "<h2>".$item->title."</h2><a href=\"".$item->link."\">".$item->link."</a><br>".$item->description."<hr>";
print "Inviata: ".$item->title."<br>";
$f = fopen($nomefile, "w");
fwrite($f,"-");
fclose($f);
}}
mail("elvis*****@gmail.com",
"news rss" . $url,
$body,
"From: EC daemon<elvis*****@gmail.com>\nReply-to: EC daemon<elvis*****@gmail.com>\nContent-Type: text/html" );
}
}?>
NOTA1 : copywithcache copia solo se il file è più vecchio della copia locale (incluso nella prima riga). Sotto un implementazione
NOTA2: creare la cartella rss_temp con permesso 777
<?
function copywithcache($local_xml_file, $xml_url, $vecchiaia = 700)
{
//copio se nn esiste in locale oppure il file è vecchio
if (!file_exists($local_xml_file) || (time() - filemtime($local_xml_file)) > $vecchiaia)
{
if ( copy($xml_url, $local_xml_file) || passthru(’wget -O "’.$local_xml_file.’" "’.$xml_url.’" ‘) )
return 1;
else
return 0;
}
else
return 0;
}
?>



Ali Servet Dönmez
on March 4 2008
Ciao Elvis, potresti vedere il sorgente di questo [0] plugin di Evolution (un mail client per GNOME) per avere un idea e poi magari migliorare il tuo codice in PHP…
[0]: http://gnome.eu.org/index.php/Evolution_RSS_Reader_Plugin