Seite 1 von 1

RDF Reader

Verfasst: Mo 30. Mai 2005, 12:33
von DonBender
Hallo liebe Leute!

Da bei mir der RDF/RSS-Reader von x28.de nicht so funktioniert, wie er soll, hab ich mir gestern einen anderen mit eingebunden. Ich konnte nämlich nicht die RSS-Feeds von N24 einlesen, weil diese ein RDF-Format haben.

Code: Alles auswählen

Modul-Input:

echo "<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\" class=\"text_medium\"> 
<tr> 
<td>RDF URL:</td> 
<td colspan=2> <INPUT TYPE=\"text\" NAME=\"CMS_VAR[0]\" VALUE=\"CMS_VALUE[0]\" style=\"width: 300px;\"></td>
<td width=\"20\"> </td>
</tr> 
<tr>
<td>Refreshtime:</td>
<td><INPUT TYPE=\"text\" NAME=\"CMS_VAR[1]\" VALUE=\"CMS_VALUE[1]\" style=\"width: 30px;\"> Minuten</td>
<td width=\"20\"> </td>
</tr>
<tr>
<td>Quelle:</td>
<td><INPUT TYPE=\"text\" NAME=\"CMS_VAR[2]\" VALUE=\"CMS_VALUE[2]\" style=\"width: 120px;\"></td>
<td width=\"20\"> </td>
</tr>
</table>";

Code: Alles auswählen

Modul-Output:

<?php
include($cfg['path']['contenido'].'external/rdf/rdf-news.php');
$in_file = "CMS_VALUE[0]";
$refresh = "CMS_VALUE[1]";
$rdfQuelle = "CMS_VALUE[2]";

$rdf = new rdf();

echo'
<div id="rdf" style="position:relative; left:0px; top:0px; width:160px; height:160px; z-index:1; overflow:hidden; visibility: visible;">';
$rdf->display($in_file, $refresh);
echo '</id><br>
<adress style="font-family:Tahoma; font-style:italic; font-size:10px; color: #1C5679;">Quelle: '.$rdfQuelle.'</adress>';
?>

Code: Alles auswählen

rdf-news.php
Diese Datei packt ihr in das Verzeichtnis Contenido/external/rdf/

<?php

class rdf {

  var $rdf_in_file = "www.f-r.de/rss/letzte_meldungen.xml/index.xml";
  var $rdf_refresh = 15;

function display($in_file, $refresh){
if (!isset($in_file)) {$in_file = $this->rdf_in_file; }
if (!isset($refresh)) {$refresh = $this->rdf_refresh; }
// Fehlermeldung unterdrücken
error_reporting(0);

    // Cachenötigkeit ermitteln und ausführen wenn nötig :-)
    $cachedir  = "cache";
    $timestamp = time();
    $cache_age = 0;
    if (!is_dir($cachedir)) mkdir($cachedir, 0755);
    $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

    $xml_parse = xml_parser_create();
    xml_parse_into_struct($xml_parse, $in_file, $values, $tags);
    xml_parser_free($xml_parse);

    // Ausgabe
    echo '<MARQUEE onmouseover=this.stop() onmouseout=this.start() scrollAmount="1" scrolldelay="60" direction="up" width="160" height="160">';
    echo '<div id="newsblock"><ul>';
    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\">".
                                 " <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"){
                    // Wenn description gesetzt dann ausgeben.
                    if (isset ($description)) {
                       echo "<li><a href=\"".$link."\" target=\"_blank\"><b>".$title."</b><br>".$description;
                    } else {
                       echo "<li><a href=\"".$link."\" target=\"_blank\">".$title;
                    }
                    echo "</a></li>\n";
                }
            }
        }

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

    }
    echo '</ul>';
    echo '</MARQUEE>';
//    echo "<a href=\"".$news_link."\" target=\"_blank\">mehr...</a>\n";
}
}
?>
Vielleicht kann man ja hier noch was verbessern.
Jedenfalls funktioniert er bei mir.

Verfasst: Mi 6. Jul 2005, 19:39
von emergence
gibts ein beispiel wo man das sehen kann ? (link ?)

Verfasst: Mi 6. Jul 2005, 21:23
von DonBender
gibt es unter www.igbce-jugend-nordost.de zu sehen

Verfasst: So 17. Jul 2005, 12:41
von kashban
Nicht schlecht. Ich brauche zwar eine Version ohne MARQUEE, aber das lässt sich ja leicht ändern. Noch besser wäre es, wenn man den Scroller konfigurieren könnte. Ich werd das mal entsprechend anpassen....