11
Hallo Jörg,
display_errors steht auf on. Wo würden denn PHP-Fehler -sofern vorhanden- ausgegeben werden ... auf der Startseite des Shops? Wenn ja, dann werden in der Tat (leider) keine Fehler produziert.
Der Code der Klasse ist frei verwendbar, wie nachfolgend auch zu lesen ist.
Vielleicht hilft Dein Kennerblick ja weiter ;-) - schon einmal vielen Dank für Deine Mühen!
display_errors steht auf on. Wo würden denn PHP-Fehler -sofern vorhanden- ausgegeben werden ... auf der Startseite des Shops? Wenn ja, dann werden in der Tat (leider) keine Fehler produziert.
Der Code der Klasse ist frei verwendbar, wie nachfolgend auch zu lesen ist.
Vielleicht hilft Dein Kennerblick ja weiter ;-) - schon einmal vielen Dank für Deine Mühen!
<?php
/*
class RSSmoosings
Version 0.1 2006-11-15
Copyright by Siegfried Hirsch
Diese Software ist frei verwendbar. Allerdings muss dieses Copyright erhalten bleiben.
Die Software darf sowohl in privaten als auch in kommerziellen Anwendungen genutzt werden.
*/
define('CACHE_CHECK', true);
define('CACHE_TIMEOUT',3600);
class RSSmoosings
{
// Cache-Verzeichnis eintragen, das beschreibbar sein muss chmod 777
var $cache = 'cache';
// Die Url des Feeds, zum Beispiel vom rss-blogger
var $rss_url = "http://news.google.com/news?ie=UTF-8&oe=utf8&q=kinder+fahrrad+sicherheit&hl=de&output=rss";
// css class für title formatierung
var $class_rss_title = "rsstitle";
// css class für title formatierung
var $class_rss_description = "rssdescription";
// Verfuegbar nach dem Einlesen des Feeds
var $rss = array();
var $channel = array();
var $items = array();
// ============= creates a tree (array) from the given xml data (only for internal use)
function xml2array($text) {
$array = array();
// this only works for rss feeds and maybe for rdf
$what = "(rss|channel|title|description|item|pubdate|link|content:encoded)";
$reg_exp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
$reg_exp = '/<'.$what.'[^>]*>(.*?)<\/\\1>/s';
preg_match_all($reg_exp, $text, $match);
foreach ($match[1] as $key=>$val) {
if ( preg_match($reg_exp, $match[2][$key]) ) {
$array[$val][] = $this->xml2array($match[2][$key]);
} else {
$array[$val] = $match[2][$key];
}
}
return $array;
}
function cachecheck()
{
$md5 = md5($this->rss_url);
if (file_exists($this->cache.$md5)) {
$timestamp = filectime($this->cache.$md5);
if (mktime() - $timestamp < CACHE_TIMEOUT) {
$data = @file($this->cache.$md5);
$data = implode("\n",$data);
return $data;
} else
return "";
}
}
// ============= Fetches the data over http
function fetch_content() {
// =========== Fetch the data
$data="";
if (CACHE_CHECK) {
$data = $this->cachecheck();
// echo "Here comes data: ".$data;
}
if (empty($data)){
$purl = parse_url($this->rss_url);
$host = $purl['host'];
$query = $purl['path'] ."?". $purl['query'];
// echo "host: $host<br>";
// echo "query: $query<br>";
// Get data by opening a socket connection.
$fp = @fsockopen($purl['host'], 80, $errnum, $errstr, 15); // Open a socket connection
if($fp) {
$fp_data="GET {$query} HTTP/1.0\r\n";
$fp_data.="Host: {$purl['host']}\r\n";
$fp_data.="User-Agent: RSSmoosings\r\n";
$fp_data.="Connection: Close\r\n\r\n";
fputs($fp, $fp_data);
while(!feof($fp)) {
$data.=fgets($fp, 8192);
}
fclose($fp);
// now cache
if (CACHE_CHECK) {
$fp = fopen($this->cache.md5($this->rss_url),"w");
fputs($fp, $data);
fclose($fp);
}
} else {
return false;
}
}
// Clean up the data by removing the http headers
$data=substr($data, strpos($data, "\r\n\r\n"), strlen($data));
return $data;
}
// get_rss - and translate from xml into php array
function get_rss($url = "") {
if (!empty($url)) {
$this->rss_url = $url;
}
$data=$this->fetch_content(); // get the data
if(!$data) return false;
// parse the xml file into a php array
$xml_array=$this->xml2array($data);
if(!$xml_array) return false;
if (array_key_exists('channel', $xml_array['rss'][0])) {
$this->channel = $xml_array['rss'][0]['channel'][0];
}
if (array_key_exists('item', $xml_array['rss'][0]['channel'][0])) {
$this->items = $xml_array['rss'][0]['channel'][0]['item'];
}
$this->rss = $xml_array;
return $xml_array;
}
// einfache Funktion zum Ausgeben der Items - siehe Beispiel unten
function printItems($count = 999, $useDescription = true, $useLink = true, $feed='')
{
$i = 1;
$rss_items = array();
foreach($this->items as $item) {
if ($feed == 'google') {
// für Google Feed
$description = str_replace('>', '>', $item['description']);
$description = str_replace('<', '<', $description);
//$description = str_replace('<a ', '<a target="_blank" ', $description);
$description = strip_tags($description, '<a>,<br>');
$description = html_entity_decode($description);
$preg = '/<a[\s]+[^>]*?href[\s]?=[\s\"\']+(.*?)[\"\']+.*?>([^<]+|.*?)?<\/a>/';
preg_match_all(trim($preg), $description, $out, PREG_PATTERN_ORDER);
$url_string = '<a href="javascript:void(null)" onclick="openWin(\'' . $out[1][0] . '\', 800,400)">' . $out[2][0] . '</a>';
$description = str_replace($out[0][0], $url_string, $description);
$url_string = '<a href="javascript:void(null)" onclick="openWin(\'' . $out[1][1] . '\',800,400)">' . $out[2][1] . '</a>';
$description = str_replace($out[0][1], $url_string, $description);
$description = str_replace('</a><a', '</a>: <a', $description);
$description = substr($description, 0);
$rss_items[$i]['description'] = utf8_decode($description);
} else {
if (isset($item['title']) && !empty($item['title'])) {
$rss_items[$i]['title'] .= $item['title'];
}
if (isset($item['description']) && !empty($item['description'])) {
$short_description = str_replace('<![CDATA[', '', $item['description']);
$short_description = str_replace(']]', '', $short_description);
$short_description = substr($short_description, 0, 412);
$rss_items[$i]['short_description'] .= nl2br($short_description);
}
if ($useDescription && isset($item['content:encoded']) && !empty($item['content:encoded'])) {
$description = str_replace('<![CDATA[', '', $item['content:encoded']);
$description = str_replace(']]', '', $description);
$rss_items[$i]['description'] .= $description;
$regexp = '/<\s*img [^\>]*src\s*=\s*[\""\']?([^\""\'\s>]*)/i';
preg_match($regexp, $description, $matches);
$size = getimagesize($_SERVER['DOCUMENT_ROOT'] . $matches[1]);
$w = 119;
$h = $size[1] / $size[0] * 119;
$rss_items[$i]['img'] = '<img src="' . $matches[1] .'" width="'.$w.'" height="'.$h.'" />';
}
$rss_items[$i]['link'] = $item['link'];
}
if ($i++ >= $count) {
// abbrechen, falls ein count angeben worden ist
break;
}
}
$i++;
return $rss_items;
}
}
?>