Hallo liebe php´ler,
ich möchte auf der Detailseite meines RSS- Verzeichnisses die Links des RSS- Feeds auslesen. Es ist mir mit folgendem Parser gelungen:
CODE <?
// the recording-constants - need to start with a value > 0 !
define ("RSS_CHANNEL", "1");
define ("RSS_IMAGE", "2");
define ("RSS_ITEM", "3");
class RSSParser {
// parser dependant variables
var $objParser;
var $intOnRecording;
var $strLastParsingError;
var $strLastData;
// data dependent variables
var $arrRSSChannel;
var $arrRSSItems;
var $inxRSSItems;
// class constructor
function RSSParser() {
$this->strLastParsingError = array();
$this->arrRSSChannel = array();
$this->arrRSSItems = array();
$this->inxRSSItems = 0;
$this->strLastData = "";
$this->intOnRecording = 0;
$this->objParser = xml_parser_create();
// set the default handlers
xml_set_object($this->objParser, $this);
xml_set_element_handler($this->objParser, "openTag", "closeTag");
xml_set_character_data_handler($this->objParser, "data");
} // constructor
function runRSSParsingProcess ($strXMLCode) {
// parse the given XML-Code
xml_parse($this->objParser, $strXMLCode);
} // runRSSParsingProcess
// parser dependent methods
// ==================================================================
function openTag($parser, $tag, $attr) {
switch ($tag) {
// set the recording flag
case "CHANNEL": $this->intOnRecording = RSS_CHANNEL; break;
case "IMAGE": $this->intOnRecording = RSS_IMAGE; break;
case "ITEM": $this->intOnRecording = RSS_ITEM; break;
} // switch
// handle attributes of tags
switch ($tag) {
case "RSS":
$this->arrRSSChannel["version"] = $attr["VERSION"]; break;
} // switch
} // function openTag(..)
function closeTag($parser, $tag) {
if ($this->intOnRecording == RSS_CHANNEL) {
switch ($tag) {
case "TITLE": $this->arrRSSChannel["title"] = $this->strLastData; break;
case "LINK": $this->arrRSSChannel["link"] = $this->strLastData; break;
case "DESCRIPTION": $this->arrRSSChannel["description"] = $this->strLastData; break;
} // switch
} else if ($this->intOnRecording == RSS_IMAGE) {
switch ($tag) {
case "TITLE": $this->arrRSSChannel["imageTitle"] = $this->strLastData; break;
case "URL": $this->arrRSSChannel["imageURL" ] = $this->strLastData; break;
case "LINK": $this->arrRSSChannel["imageLink" ] = $this->strLastData; break;
} // switch
} else if ($this->intOnRecording == RSS_ITEM) {
switch ($tag) {
case "ITEM": $this->inxRSSItems++; break;
case "TITLE": $this->arrRSSItems[$this->inxRSSItems]["title"] = $this->strLastData; break;
case "LINK": $this->arrRSSItems[$this->inxRSSItems]["link"] = $this->strLastData; break;
} // switch
} // if..else (onRecording)
$this->strLastData = "";
} // function closeTag(..)
function data($parser, $data) {
if ($this->intOnRecording != 0) {
$this->strLastData .= trim($data);
} // if
} // function data(..)
// get methods
// ==================================================================
function getRSSChannel() {
return $this->arrRSSChannel;
} // getRSSChannel()
function getRSSItems() {
return $this->arrRSSItems;
} // getRSSItems()
} // class rssParser
?>
Folgenden Code habe ich in die entsprechende Datei eingebunden:
CODE <?php
// include the parser class
require_once ("RSSParser.class.php");
$rssParser = new RSSParser();
$rssSource = sefReltoAbs('index.php?option=com_linkdirectory&amp;task=detail&amp;id='.$link->id.'&amp;Itemid='.$this->row->url);
$rssFile = implode("",file($rssSource));
#echo "RSS-Quelle: ".$rssSource;
// start the parsing process
$rssParser->runRSSParsingProcess ($rssFile);
// get the arrays and print the information
$channelInfo = $rssParser->getRSSChannel();
$rssItems = $rssParser->getRSSItems();
if (isset ($channelInfo["version"]) ) {
echo "<br>RSS-Version: ".$channelInfo["version"];
} // if
echo "<br>";
if ( isset($channelInfo["imageURL"]) && $channelInfo["imageURL"] != "" ) {
echo "<a href=\"".$channelInfo["imageLink"]."\">";
echo "<img src=\"".$channelInfo["imageURL"]."\" ";
echo "title=\"".$channelInfo["imageTitle"]."\"";
echo "/>";
echo "</a>";
} // if
echo "<br>Titel: <b>".utf8_decode($channelInfo["title"])."</b>";
echo "<br>Beschreibung: <b>".utf8_decode($channelInfo["description"])."</b>";
echo "<br>Beiträge: <b>".count($rssItems)."</b>";
$i = 20;
foreach ($rssItems as $item) {
if (--$i < 0)
break;
echo "<br><h3>";
echo "<a href=\"".$item["link"]."\">";
echo "<span class=\"rssItem\">";
echo $item["title"];
echo "</span>";
echo "</a>";
} // foreach
?>
Nun mein Anliegen:
Ich möchte nicht nur den Titel und den Link auslesen, sondern auch die Description zu jedem einzelnen Item untereinander anzeigen lassen.
Für Tips bin ich sehr dankbar
Gruss
ich möchte auf der Detailseite meines RSS- Verzeichnisses die Links des RSS- Feeds auslesen. Es ist mir mit folgendem Parser gelungen:
CODE <?
// the recording-constants - need to start with a value > 0 !
define ("RSS_CHANNEL", "1");
define ("RSS_IMAGE", "2");
define ("RSS_ITEM", "3");
class RSSParser {
// parser dependant variables
var $objParser;
var $intOnRecording;
var $strLastParsingError;
var $strLastData;
// data dependent variables
var $arrRSSChannel;
var $arrRSSItems;
var $inxRSSItems;
// class constructor
function RSSParser() {
$this->strLastParsingError = array();
$this->arrRSSChannel = array();
$this->arrRSSItems = array();
$this->inxRSSItems = 0;
$this->strLastData = "";
$this->intOnRecording = 0;
$this->objParser = xml_parser_create();
// set the default handlers
xml_set_object($this->objParser, $this);
xml_set_element_handler($this->objParser, "openTag", "closeTag");
xml_set_character_data_handler($this->objParser, "data");
} // constructor
function runRSSParsingProcess ($strXMLCode) {
// parse the given XML-Code
xml_parse($this->objParser, $strXMLCode);
} // runRSSParsingProcess
// parser dependent methods
// ==================================================================
function openTag($parser, $tag, $attr) {
switch ($tag) {
// set the recording flag
case "CHANNEL": $this->intOnRecording = RSS_CHANNEL; break;
case "IMAGE": $this->intOnRecording = RSS_IMAGE; break;
case "ITEM": $this->intOnRecording = RSS_ITEM; break;
} // switch
// handle attributes of tags
switch ($tag) {
case "RSS":
$this->arrRSSChannel["version"] = $attr["VERSION"]; break;
} // switch
} // function openTag(..)
function closeTag($parser, $tag) {
if ($this->intOnRecording == RSS_CHANNEL) {
switch ($tag) {
case "TITLE": $this->arrRSSChannel["title"] = $this->strLastData; break;
case "LINK": $this->arrRSSChannel["link"] = $this->strLastData; break;
case "DESCRIPTION": $this->arrRSSChannel["description"] = $this->strLastData; break;
} // switch
} else if ($this->intOnRecording == RSS_IMAGE) {
switch ($tag) {
case "TITLE": $this->arrRSSChannel["imageTitle"] = $this->strLastData; break;
case "URL": $this->arrRSSChannel["imageURL" ] = $this->strLastData; break;
case "LINK": $this->arrRSSChannel["imageLink" ] = $this->strLastData; break;
} // switch
} else if ($this->intOnRecording == RSS_ITEM) {
switch ($tag) {
case "ITEM": $this->inxRSSItems++; break;
case "TITLE": $this->arrRSSItems[$this->inxRSSItems]["title"] = $this->strLastData; break;
case "LINK": $this->arrRSSItems[$this->inxRSSItems]["link"] = $this->strLastData; break;
} // switch
} // if..else (onRecording)
$this->strLastData = "";
} // function closeTag(..)
function data($parser, $data) {
if ($this->intOnRecording != 0) {
$this->strLastData .= trim($data);
} // if
} // function data(..)
// get methods
// ==================================================================
function getRSSChannel() {
return $this->arrRSSChannel;
} // getRSSChannel()
function getRSSItems() {
return $this->arrRSSItems;
} // getRSSItems()
} // class rssParser
?>
Folgenden Code habe ich in die entsprechende Datei eingebunden:
CODE <?php
// include the parser class
require_once ("RSSParser.class.php");
$rssParser = new RSSParser();
$rssSource = sefReltoAbs('index.php?option=com_linkdirectory&amp;task=detail&amp;id='.$link->id.'&amp;Itemid='.$this->row->url);
$rssFile = implode("",file($rssSource));
#echo "RSS-Quelle: ".$rssSource;
// start the parsing process
$rssParser->runRSSParsingProcess ($rssFile);
// get the arrays and print the information
$channelInfo = $rssParser->getRSSChannel();
$rssItems = $rssParser->getRSSItems();
if (isset ($channelInfo["version"]) ) {
echo "<br>RSS-Version: ".$channelInfo["version"];
} // if
echo "<br>";
if ( isset($channelInfo["imageURL"]) && $channelInfo["imageURL"] != "" ) {
echo "<a href=\"".$channelInfo["imageLink"]."\">";
echo "<img src=\"".$channelInfo["imageURL"]."\" ";
echo "title=\"".$channelInfo["imageTitle"]."\"";
echo "/>";
echo "</a>";
} // if
echo "<br>Titel: <b>".utf8_decode($channelInfo["title"])."</b>";
echo "<br>Beschreibung: <b>".utf8_decode($channelInfo["description"])."</b>";
echo "<br>Beiträge: <b>".count($rssItems)."</b>";
$i = 20;
foreach ($rssItems as $item) {
if (--$i < 0)
break;
echo "<br><h3>";
echo "<a href=\"".$item["link"]."\">";
echo "<span class=\"rssItem\">";
echo $item["title"];
echo "</span>";
echo "</a>";
} // foreach
?>
Nun mein Anliegen:
Ich möchte nicht nur den Titel und den Link auslesen, sondern auch die Description zu jedem einzelnen Item untereinander anzeigen lassen.
Für Tips bin ich sehr dankbar
Gruss