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:

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word


 

Ultimi post

About Me

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

scontiPHP