parser: add get_links()

This commit is contained in:
Andrew Dolgov 2013-05-01 19:08:04 +04:00
parent 431e27851b
commit b9eee80e08
1 changed files with 25 additions and 0 deletions

View File

@ -6,6 +6,7 @@ class FeedParser {
private $link; private $link;
private $title; private $title;
private $type; private $type;
private $xpath;
const FEED_RDF = 0; const FEED_RDF = 0;
const FEED_RSS = 1; const FEED_RSS = 1;
@ -26,6 +27,7 @@ class FeedParser {
$root = $this->doc->firstChild; $root = $this->doc->firstChild;
$xpath = new DOMXPath($this->doc); $xpath = new DOMXPath($this->doc);
$xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom'); $xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
$this->xpath = $xpath;
$root = $xpath->query("(//atom:feed|//channel)")->item(0); $root = $xpath->query("(//atom:feed|//channel)")->item(0);
@ -115,4 +117,27 @@ class FeedParser {
return $this->items; 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;
}
} ?> } ?>