pass xpath object to feeditem, support media-rss objects

This commit is contained in:
Andrew Dolgov 2013-05-01 19:40:43 +04:00
parent fd0daa9b55
commit 4c00e15b5d
3 changed files with 21 additions and 4 deletions

View File

@ -2,7 +2,7 @@
class FeedItem_Atom {
private $elem;
function __construct($elem) {
function __construct($elem, $doc, $xpath) {
$this->elem = $elem;
}

View File

@ -1,9 +1,11 @@
<?php
class FeedItem_RSS {
private $elem;
private $xpath;
function __construct($elem) {
function __construct($elem, $doc, $xpath) {
$this->elem = $elem;
$this->xpath = $xpath;
}
function get_id() {
@ -92,6 +94,20 @@ class FeedItem_RSS {
array_push($encs, $enc);
}
$enclosures = $this->xpath->query("media:content", $this->elem);
$encs = array();
foreach ($enclosures as $enclosure) {
$enc = new FeedEnclosure();
$enc->type = $enclosure->getAttribute("type");
$enc->link = $enclosure->getAttribute("url");
$enc->length = $enclosure->getAttribute("length");
array_push($encs, $enc);
}
return $encs;
}

View File

@ -27,6 +27,7 @@ class FeedParser {
$root = $this->doc->firstChild;
$xpath = new DOMXPath($this->doc);
$xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
$xpath->registerNamespace('media', 'http://search.yahoo.com/mrss/');
$this->xpath = $xpath;
$root = $xpath->query("(//atom:feed|//channel)")->item(0);
@ -62,7 +63,7 @@ class FeedParser {
$articles = $xpath->query("//atom:entry");
foreach ($articles as $article) {
array_push($this->items, new FeedItem_Atom($article));
array_push($this->items, new FeedItem_Atom($article, $this->doc, $this->xpath));
}
break;
@ -83,7 +84,7 @@ class FeedParser {
$articles = $xpath->query("//channel/item");
foreach ($articles as $article) {
array_push($this->items, new FeedItem_RSS($article));
array_push($this->items, new FeedItem_RSS($article, $this->doc, $this->xpath));
}
break;