PHP-Tools : RDF-News-Reader Source

 home : tools

  

PHP-Tools : rdf-news.func.php

<?php

/*
  Aufruf: (wahlweise)
    rdf_news('http://www.heise.de/newsticker/heise.rdf');
    rdf_news('http://www.heise.de/mobil/newsticker/heise.rdf');
    rdf_news('http://www.heise.de/security/news/news.rdf');
    
  History:
    1.0 - 09.09.2003: Erster Versuch :-)
    1.1 - 10.09.2003: Channelinfo auch für rdf v2.0 angepasst
    1.2 - 11.09.2003: Description auch für ITEM hinzugefügt
    1.3 - 23.10.2003: Lesefehler der Datei wird abgefangen
    1.5 - 04.11.2003: Code optimiert
    1.8 - 08.03.2004: Caching (default Refreshtime = 15 Min)
    1.9 - 09.03.2004: Kleine Designänderungen...
    1.91- 02.05.2005: Änderung im Cache-File-Namen erstellen.
    1.92- 01.06.2005: UTF-8 wird erkannt und ausgewertet.
    1.93- 01.07.2006: Listenabstand vergrößert <li></li>
*/

function rdf_news($in_file$refresh 15){

// Fehlermeldung unterdrücken
error_reporting(0);

$pgm_version "v1.93";
$pgm_autor   "Alexander Palm";
$pgm_date    "01.07.2006";

    
// Cachenötigkeit ermitteln und ausführen wenn nötig :-)
    
$cachedir  "cache";
    
$timestamp time();
    
$cache_age 0;
    if (!
is_dir($cachedir)) mkdir($cachedir0755);
    
$in_file_url parse_url ($in_file);
    unset (
$in_file_url['scheme'], $in_file_url['port'], $in_file_url['user'], $in_file_url['pass']);
    
$cachefile   "";
    foreach (
$in_file_url as $in_file_piece){
          
$cachefile .= str_replace(array(".""/""=""&"), "_"$in_file_piece);
    }
    
$cachefile .= ".rdf";
    
$cachefile   $cachedir "/" $cachefile;

    if (
is_file($cachefile)){                //existiert die Cache-Datei?
     
$cache_date filemtime($cachefile); // TimeStamp vom File
        
$cache_age  sprintf("%u", ($timestamp $cache_date) / 60);
     
$cache_date date("d.m.Y / H:i:s"$cache_date); // TimeStamp in Datums-String umwandeln
        
if ($cache_age >= $refresh){ // ist sie älter als gewünscht?
        
$use_cache false;
        
$warn_open  "<font color=\"red\">";
        
$warn_close "</font>";
        } else {
        
$use_cache true;              // wenn nicht zu alt dann Cachefile lesen
        
$warn_open $warn_close "";
        }
    } else {
        
$use_cache false;                 // Cache-Datei existiert nicht
    
}
    
    if (!
$use_cache){
        
$in_file file($in_file);
        if (
$in_file){                // wenn Remote-Datei nicht lesbar dann doch Cache versuchen.
            
$fhd fopen($cachefile'w');  // Datei neu (CacheFile) schreiben wenn sie lesbar war.
            
foreach ($in_file as $lineout){
                
fputs($fhd$lineout);
            }
            
fclose ($fhd);
        
clearstatcache(); // Datei-Status-Cache löschen
        
$cache_date filemtime($cachefile); // TimeStamp vom File
        
$cache_age  sprintf("%u", ($timestamp $cache_date) / 60);
        
$cache_date date("d.m.Y / H:i:s"$cache_date); // TimeStamp in Datums-String umwandeln
        
$warn_open  $warn_close "";
        }
    }

    
    
// XML-Parsing

    
$in_file file($cachefile) or die ("<h3><font color=\"red\">Cache-Datei konnte nicht gelesen werden!</font></h3>");
    
$in_file implode(""$in_file);   // Datei komplett in eine Variable einlesen

    
$encoding  = (preg_match('/encoding.?=.?"UTF-8"/i'$in_file)) ? "UTF-8" "ISO-8859-1";
    
$xml_parse xml_parser_create($encoding);
    
xml_parser_set_option($xml_parseXML_OPTION_TARGET_ENCODING"ISO-8859-1");
    
xml_parse_into_struct($xml_parse$in_file$values$tags);
    
xml_parser_free($xml_parse);

    
// Ausgabe
    
echo "<ul>\n";
    foreach(
$tags as $key => $tag){

        if (
$key == "CHANNEL"){
            for (
$i=$tag[0]; $i <= $tag[count($tag)-1];$i++){
                if (
$values[$i]['tag']=="TITLE" && $values[$i]['level']==3$title $values[$i]['value'];
                if (
$values[$i]['tag']=="LINK" && $values[$i]['level']==3$news_link $values[$i]['value'];
                if (
$values[$i]['tag']=="DESCRIPTION" && $values[$i]['level']==3$description $values[$i]['value'];

                          if (
$values[$i]['tag']=="CHANNEL" && $values[$i]['type']=="close"){
                            echo 
"<h2>".$title.", <font size=\"-3\">".
                                 
"<a href=\"http://alexander-palm.de/tools/rdf-newss.func.php\">RDF-News-Reader</a>".
                                 
" by $pgm_autor, $pgm_version ($pgm_date)</font><br>\n<font size=\"-1\">$description<br>\n";
                            echo 
"${warn_open}vom $cache_date, seit $cache_age Minute(n)$warn_close / Refresh alle $refresh Minuten</font></h2>\n";
                          }
            }
        }

        if (
$key == "ITEM"){
            for (
$i $tag[0];$i <= $tag[count($tag)-1];$i++){
                if (
$values[$i]['tag']=="TITLE" && $values[$i]['type']=="complete"$title $values[$i]['value'];
                if (
$values[$i]['tag']=="LINK" && $values[$i]['type']=="complete"$link $values[$i]['value'];
                if (
$values[$i]['tag']=="DESCRIPTION" && $values[$i]['type']=="complete"$description $values[$i]['value'];
                
                if (
$values[$i]['tag']=="ITEM" && $values[$i]['type']=="close"){
                    echo 
"<li style='margin-bottom:1em'><a href=\"".$link."\" target=\"_blank\">".$title."</a>";
                    
// Wenn description gesetzt dann ausgeben.
                    
if (isset ($description)) echo "<br><font size=\"-1\">$description</font>";
                    echo 
"</li>\n";
                }
            }
        }

    unset(
$title);
    unset(
$link);
    unset(
$description);

    }
    echo 
"</ul>\n";
    echo 
"<font size=\"+1\"><a href=\"".$news_link."\" target=\"_blank\">mehr...</a></font><br>\n";
}

?>

go top | mailto- Anmerkung | made by -AP- on 05.03.2004 11:18:15 | visitors: 8585 / 1 | created in 0.1091s | Impressum / Datenschutz