From b9eee80e08fab8ebcc1484e8d62cd646ac451f43 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 19:08:04 +0400 Subject: [PATCH] parser: add get_links() --- classes/feedparser.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/classes/feedparser.php b/classes/feedparser.php index ed284a043..6d3a15802 100644 --- a/classes/feedparser.php +++ b/classes/feedparser.php @@ -6,6 +6,7 @@ class FeedParser { private $link; private $title; private $type; + private $xpath; const FEED_RDF = 0; const FEED_RSS = 1; @@ -26,6 +27,7 @@ class FeedParser { $root = $this->doc->firstChild; $xpath = new DOMXPath($this->doc); $xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom'); + $this->xpath = $xpath; $root = $xpath->query("(//atom:feed|//channel)")->item(0); @@ -115,4 +117,27 @@ class FeedParser { return $this->items; } + function get_links($rel) { + $rv = array(); + + switch ($this->type) { + case $this::FEED_ATOM: + $links = $this->xpath->query("//atom:feed/atom:link"); + + foreach ($links as $link) { + if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) { + array_push($rv, $link->getAttribute('href')); + } + } + break; + case $this::FEED_RSS: + $links = $this->xpath->query("//channel/link"); + if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) { + array_push($rv, $link->getAttribute('href')); + } + break; + } + + return $rv; + } } ?>