blog personale

RSS to Mail - script PHP

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

1 Response to “RSS to Mail - script PHP”

  1. 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

Comment RSS · TrackBack URI

Leave a comment

Name: (Required)

E-mail: (Required)

Website:

Comment:


 

Ultimi post

About Me

Blog tecnico/geek di Elvis. Chi sono ? studente & web developer freelance. Vedi la pagina "about me" per altre info.

scontiphp