Problem parsing RSS feed
Posted: Mon Sep 08, 2008 2:55 pm
Hi there!
I'm having trouble parsing an RSS file. Right now, my code is returning every item in the feed. I need it to stop after three posts are parsed.
I used this as a starting point: http://www.sitepoint.com/article/php-xm ... g-rss-1-0/
Here's my RSS parser class:
And here's the code that's using the class:
Thanks for any advice you can provide! All the best,
Dave
I'm having trouble parsing an RSS file. Right now, my code is returning every item in the feed. I need it to stop after three posts are parsed.
I used this as a starting point: http://www.sitepoint.com/article/php-xm ... g-rss-1-0/
Here's my RSS parser class:
Code: Select all
class RSSParser {
var $insideitem = false;
var $tag = "";
var $title = "";
var $description = "";
var $link = "";
function startElement($parser, $tagName, $attrs) {
if ($this->insideitem) {
$this->tag = $tagName;
} elseif ($tagName == "ITEM") {
$this->insideitem = true;
}
}
function endElement($parser, $tagName) {
if ($tagName == "ITEM") {
printf("<a class='postheading href='%s'>%s</a>",trim($this->link),htmlspecialchars(trim($this->title)));
printf("<a class='postsummary' href='%s'>%s</a>",trim($this->link),htmlspecialchars(trim($this->description)));
$this->title = "";
$this->description = "";
$this->link = "";
$this->insideitem = false;
}
}
function characterData($parser, $data) {
if ($this->insideitem) {
switch ($this->tag) {
case "TITLE":
$this->title .= $data;
break;
case "DESCRIPTION":
$this->description .= $data;
break;
case "LINK":
$this->link .= $data;
break;
}
}
}
}
?>
Code: Select all
$xml_parser = xml_parser_create();
$rss_parser = new RSSParser();
xml_set_object($xml_parser,&$rss_parser);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("http://www.mysite.com/my-rss-feed","r")
or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
{
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
fclose($fp);
xml_parser_free($xml_parser);
Thanks for any advice you can provide! All the best,
Dave