openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 56ba415d6d3e66e16663dd92eba2da0439ce09cb
parent ac0eb47a0ab6c9cd88998a47d2986f6e86dca09c
Author: dankert <devnull@localhost>
Date:   Thu, 14 Oct 2004 23:15:13 +0200

Lesen eines RSS-Feeds und erzeugen eines HTML-Abschnittes dafuer

Diffstat:
dynamicClasses/RSSReader.class.php | 156+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 156 insertions(+), 0 deletions(-)

diff --git a/dynamicClasses/RSSReader.class.php b/dynamicClasses/RSSReader.class.php @@ -0,0 +1,155 @@ +<?php +// --------------------------------------------------------------------------- +// $Id$ +// --------------------------------------------------------------------------- +// OpenRat Content Management System +// Copyright (C) 2002 Jan Dankert, jandankert@jandankert.de +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// --------------------------------------------------------------------------- +// $Log$ +// Revision 1.1 2004-10-14 21:15:13 dankert +// Lesen eines RSS-Feeds und erzeugen eines HTML-Abschnittes dafuer +// +// --------------------------------------------------------------------------- + + + +/** + * @author Jan Dankert + */ +class RSSReader /*extends DynamicElement*/ +{ + /** + * Bitte immer alle Parameter in dieses Array schreiben, dies ist fuer den Web-Developer hilfreich. + * @type String + */ + var $parameters = Array( + 'url'=>'The Url of the RSS-Feed to read. Default: <em>http://www.heise.de/newsticker/heise.rdf</em>' + ); + + + var $url = 'http://www.heise.de/newsticker/heise.rdf'; + + /** + * Bitte immer eine Beschreibung benutzen, dies ist fuer den Web-Developer hilfreich. + * @type String + */ + var $description = 'Reads a RSS-Feed and displays its content as a html list'; + var $api; + + // Erstellen des Hauptmenues + function execute() + { + // Lesen des Root-Ordners + $rss = $this->parse( implode('',file($this->url)) ); + + $this->api->output('<ul>'); + + // Schleife ueber alle Inhalte des Root-Ordners + foreach( $rss['items'] as $item ) + { + $this->api->output('<li>'); + $this->api->output('<a href="'.$item['link'].'">'.$item['title'].'</a><br/>'.$item['description']); + $this->api->output('</li>'); + } + + $this->api->output('</ul>'); + } + + + function parse( $feed ) + { + // Parses the RSS feed into the array + $arr = array(); + // Determine encoding + preg_match('/<\?xml version="1\.0" encoding="(.*)"\?>/i', $feed, $sarr); + if ( !empty($sarr[1])) + $arr["encoding"] = $sarr[1]; + // Determine title + preg_match('/<title>(.*)<\/title>/i', $feed, $sarr); + if ( !empty($sarr[1])) + $arr["title"] = $sarr[1]; + // Determine title + preg_match('/<title>(.*)<\/title>/i', $feed, $sarr); + if ( !empty($sarr[1])) + $arr["title"] = $sarr[1]; + // Determine description + preg_match('/<description>(.*)<\/description>/i', $feed, $sarr); + if ( !empty($sarr[1])) + $arr["description"] = $sarr[1]; + // Determine link + preg_match('/<link>(.*)<\/link>/i', $feed, $sarr); + if ( !empty($sarr[1])) + $arr["link"] = $sarr[1]; + // Determine language + preg_match('/<language>(.*)<\/language>/i', $feed, $sarr); + if ( !empty($sarr[1])) + $arr["language"] = $sarr[1]; + // Determine generator + preg_match('/<generator>(.*)<\/generator>/i', $feed, $sarr); + if ( !empty($sarr[1])) + $arr["generator"] = $sarr[1]; + // Strip items + $parts = explode("<item>", $feed); + foreach($parts as $part) + { + $item = substr($part, 0, strpos($part, "</item>")); + if ( !empty($item) ) + $items[] = $item; + } + // Fill the channel array + $arr["items"] = array(); + foreach($items as $item) + { + $i = array(); + + // Determine title + preg_match('/<title>(.*)<\/title>/i', $item, $title); + if ( !empty($title[1])) + $i['title'] = $title[1]; + else + $i['title'] = ''; + + // Determine pubdate + preg_match('/<pubDate>(.*)<\/pubDate>/i', $item, $pubdate); + if ( !empty($pubdate[1])) + $i['pubDate'] = strtotime($pubdate[1]); + else + $i['pubDate'] = ''; + + // Determine link + preg_match('/<link>(.*)<\/link>/i', $item, $link); + if ( !empty($link[1])) + $i['link'] = $link[1]; + else + $i['link'] = ''; + + // Determine description + if(stristr($item, '<![CDATA[')) + preg_match('/<description><!\[CDATA\[(.*)\]\]><\/description>/is', $item, $description); + else + preg_match('/<description>(.*)<\/description>/is', $item, $description); + + if ( !empty($description[1])) + $i['description'] = $description[1]; + else + $i['description'] = ''; + + $arr["items"][] = $i; + } + return $arr; + } +}+ \ No newline at end of file