RSS-Feed Reader

Diesen RSS-Feed-Reader habe ich lange Zeit um auf meiner Webseite RSS-Feeds einzublenden. Eingebunden wird das ganze über einen iframe in der Seite.

Z.B.:

<iframe src="https://your-domain/rssfeed.php?url=http://newsfeed.zeit.de/politik/index" width="100%" height="600"></iframe>

Viel Spaß bei der Nutzung!

Sourcecode

<?php
$display_channel_name = "false";
$offset = "0";
$number_items = "0";
$number_chars = "0";
$rss_cache_dir = 'absolute path to your cache directory';

echo '<html>'."\n";
echo '<head>'."\n";
echo '<link rel="stylesheet" type="text/css" href="https://your-domain/rss_styles.css" />'."\n";
echo '</head>'."\n";
echo '<body>'."\n";

if(isset($_GET['url']) && $_GET['url'] != ''){
  $url = trim(strip_tags($_GET['url']));
  if(isset($_GET['display_channel_name'])){$display_channel_name = trim(strip_tags($_GET['display_channel_name']));};
  if(isset($_GET['offset'])){$offset = trim(strip_tags($_GET['offset']));};
  if(isset($_GET['num_items'])){$num_items = trim(strip_tags($_GET['num_items']));};
  if(isset($_GET['num_chars'])){$num_chars = trim(strip_tags($_GET['num_chars']));};
  
  $rss = '';
  $rss_file = 'rss_'.md5($url);
  
  if(date("j",@filemtime("$rss_cache_dir/$rss_file")) == date("j",time())){
    $fh = @fopen("$rss_cache_dir/$rss_file","r");
    if($fh != ''){
      while(!feof($fh)){
        $rss .= fgets($fh,2048);
        };
      fclose($fh);
      echo $rss;
      exit();
      };
    };
    
  $ret = getrss($url);
  $rss_channel = $ret[0];
  $rss_items = $ret[1];
  
  if($display_channel_name == 'true'){
    $rss .= '<h1>'."\n";
    if($rss_channel['link']){ 
      $rss .= '<a href="'.$rss_channel['link'].'" target="_blank">'.$rss_channel['title'].'</a><br/>'."\n";
    }else{
      $rss .= $rss_channel['title'].'<br/>'."\n";
      };
    $rss .= '<font size="-1">'.$rss_channel['description'].'</font>'."\n";
    $rss .= '</h1>'."\n";
    };

  if($num_items == 0 or $num_items > count($rss_items)-$offset){$num_items = count($rss_items)-$offset;};
  $rss .= '<table>'."\n";
  for($i=0;$i<$num_items;$i++){
    $rss .= '<tr><td><a class="link" href="'.$rss_items[$i]['link'].'" target="_blank">'.$rss_items[$i]['title'].'</a><br/>'."\n";
    $rss .= '<div class="description">'."\n";
    
    $description = '';
    if(isset($rss_items[$i]['content:encoded']) && $rss_items[$i]['content:encoded'] != ''){
      $description = $rss_items[$i]['content:encoded'];
    }elseif(isset($rss_items[$i]['description']) && $rss_items[$i]['description'] != ''){
      $description = $rss_items[$i]['description'];
      };
    
    if($description != ''){
      if(($num_chars)&&($num_chars<strlen($description))){
        $rss .= substr($description,0,strpos($description," ",$num_chars))." ...";
      }else{
        $rss .= $description;
        };
      if($rss_items[$i]['link']){
        $rss .= '&nbsp;<a href="'.$rss_items[$i]['link'].'" target="_blank">mehr...</a><br/>'."\n";
        };
      };
    $rss .= '</div></td></tr>'."\n";
    };
  if($num_items <= 0){
    $rss .= '<tr><td>'."\n";
    $rss .= '</td></tr>'."\n";
    };
  $rss .= '</table>'."\n";
  
  if($rss_channel['dc:publisher']){$rss .= "<p>By {$rss_channel['dc:publisher']}</p>\n";};
  if($rss_channel['dc:date']){$rss .= "<p>{$rss_channel['dc:date']}</p>\n";};
  if($rss_channel['copyright']){$rss .= "<div class='copy'>{$rss_channel['copyright']}</div>\n";};

  $fh = @fopen("$rss_cache_dir/$rss_file","w");
  if($fh != ''){
    fwrite($fh,$rss);
    };
  echo $rss;
}else{
  echo 'Keine URL!<br>'."\n";
  exit();
  };
echo '</body>'."\n";
echo '</html>'."\n";

function getrss($url){
  $rss_channel = array();
  $rss_items = array();
  $simple = implode('',@file($url));

  $p = xml_parser_create();
  xml_parse_into_struct($p,$simple,$vals,$index);
  xml_parser_free($p);
  $type=0;
  
  $id=0;
  for($i=0;$i<count($vals);$i++){

    if((strtolower($vals[$i]['tag']) == 'channel') && ($vals[$i]['type'] == 'open')){$id=$vals[$i]['level']+1;};
    if(($type == 0) && ($id == $vals[$i]['level'])){
      $rss_channel[strtolower($vals[$i]['tag'])] = $vals[$i]['value'];
    }else{
      $tmp[strtolower($vals[$i]['tag'])] = $vals[$i]['value'];
      };

    if(strtolower($vals[$i]['tag']) == 'item'){
      if(($vals[$i]['type']=="open")&&($type==0)){$type=1;};
      if($vals[$i]['type']=="close"){
        $rss_items[]=$tmp;
        $tmp = array();
        };
      };
    };
  $ret[0] = $rss_channel;
  $ret[1] = $rss_items;
  return($ret);
  };

?>

Schreibe einen Kommentar