Alexander Brock: RSS Feed in Seite einbinden

Beitrag lesen

Hallo Freunde des gehobenen Forumsgenusses,

javascripts kann ich umändern,php fast nix

also kann das mir jemand genau erklären

Du musst einen HTTP-GET-Request an den Host, von dem du das RSS beziehen willst senden und ihn bitten, "/rss.php" rauszurücken. Dazu kannst du untenstehende Funktion verwenden, sie stammt aus meinem Linkchecker und unterliegt der GPL, wenn dir das nicht passt musst du halt nach anderen Quellen suchen oder dir selber eine schreiben (HTTP/1.1 RFC).

Dann musst du das erhaltene RSS parsen und ausgeben.
Ich würde das RSS übrigens nicht bei jedem Seitenaufruf
herunterladen, sondern cachen.

  
/**  
* Sendet einen HTTP-GET-Request an einen Server und analysiert die Antwort.  
*  
* @param string URL, die abgerufen werden soll.  
* @param int Zeit in Sekunden, die die Methode maximal verbraten darf.  
* @param string Weitere Header, die gesendet werden sollen. Es können beliebig viele weitere Parameter angehängt werden, die dann als Header mitgeschickt werden.  
* @return array Assoziatives Array, in dessen Schlüssel '_request' der gesendete HTTP-Request, in '_head' der empfangene Header und in '_body' der empfangene Body steht.  
*/  
 function http_get(  
  $url,  
  $timeout = 30,  
  $useragent = 'User-Agent: Selflinkchecker 1.0 (http://aktuell.de.selfhtml.org/pfad/zum/Artikel)'  
 ) {  
  $timeout = (int)round($timeout/2+0.0000000001);  
  $return = array();  
  $port = 80;  
  
  $inf = parse_url($url);  
  
  if (!isset($inf['scheme']) or $inf['scheme'] !== 'http') return array('status' => -1);  
  if (!isset($inf['host'])) return array('status' => -2);  
  $host = $inf['host'];  
  
  if (!isset($inf['path'])) return array('status' => -3);  
  $path = $inf['path'];  
  if (isset($inf['query'])) $path .= '?'.$inf['query'];  
  
  if (isset($inf['port'])) $port = $inf['port'];  
  
  $pointer = fsockopen($host, $port, $errno, $errstr, $timeout);  
  if (!$pointer) return array('status' => -4, 'errstr' => $errstr, 'errno' => $errno);  
  socket_set_timeout($pointer, $timeout);  
  
  $head =  
  'GET '.$path.' HTTP/1.0'."\r\n".  
  'Host: '.$host."\r\n";  
  
  if (isset($inf['user']))  
   $head .= 'Authorization: Basic '.base64_encode($inf['user'].':'.(isset($inf['pass']) ? $inf['pass'] : ''))."\r\n";  
  if (func_num_args() > 2) {  
   for ($i = 2; $i < func_num_args(); $i++) {  
    $arg = func_get_arg($i);  
    if (strpos($arg, ':') !== false and strpos($arg, "\r") === false and strpos($arg, "\n") === false) {  
     $head .= $arg."\r\n";  
    }  
   }  
  }  
  else $head .= $useragent."\r\n";  
  
  $head .=  
  'Connection: close'."\r\n"."\r\n"  
  ;  
  
  fputs($pointer, $head);  
  $response = '';  
  
  $status = socket_get_status($pointer);  
  while (!$status['timed_out'] && !$status['eof']) {  
   $response .= fgets($pointer);  
   $status = socket_get_status($pointer);  
  }  
  fclose($pointer);  
  if ($status['timed_out']) {  
   return array('status' => -5, '_request' => $head);  
  }  
  
  $res = str_replace("\r\n", "\n", $response);  
  $res = str_replace("\r", "\n", $res);  
  $res = str_replace("\t", ' ', $res);  
  
  $temp = explode("\n\n", $res, 2);  
  
  $head = $temp[0];  
  $body = $temp[1];  
  
  $ares = explode("\n", $head);  
  $first_line = explode(' ', array_shift($ares), 3);  
  
  $return['status'] = trim($first_line[1]);  
  $return['reason'] = trim($first_line[2]);  
  
  foreach ($ares as $line) {  
   $temp = explode(':', $line, 2);  
   if (isset($temp[0]) and isset($temp[1])) {  
    $return[strtolower(trim($temp[0]))] = trim($temp[1]);  
   }  
  }  
  $return['_body'] = $body;  
  $return['_head'] = $head;  
  $return['_request'] = $head;  
  
  return $return;  
 }  

Gruß
Alexander Brock