X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=classes%2Ffeeditem%2Fatom.php;h=dfac7149f6cb4981cd6d768dd36e3600b80dd438;hb=523bd90bafffee18d9c7652c68f4c08d25be339e;hp=0d888c4437f61ac261eda8fc4e8b0c753b3dbdc2;hpb=04d2f9c831b14f7295a3475746b9096402a055f0;p=tt-rss.git diff --git a/classes/feeditem/atom.php b/classes/feeditem/atom.php index 0d888c44..dfac7149 100644 --- a/classes/feeditem/atom.php +++ b/classes/feeditem/atom.php @@ -1,10 +1,5 @@ elem = $elem; - } +class FeedItem_Atom extends FeedItem_Common { function get_id() { $id = $this->elem->getElementsByTagName("id")->item(0); @@ -22,14 +17,36 @@ class FeedItem_Atom { if ($updated) { return strtotime($updated->nodeValue); } + + $published = $this->elem->getElementsByTagName("published")->item(0); + + if ($published) { + return strtotime($published->nodeValue); + } + + $date = $this->xpath->query("dc:date", $this->elem)->item(0); + + if ($date) { + return strtotime($date->nodeValue); + } } + function get_link() { $links = $this->elem->getElementsByTagName("link"); foreach ($links as $link) { - if ($link && $link->hasAttribute("href") && !$link->hasAttribute("rel")) { - return $link->getAttribute("href"); + if ($link && $link->hasAttribute("href") && + (!$link->hasAttribute("rel") + || $link->getAttribute("rel") == "alternate" + || $link->getAttribute("rel") == "standout")) { + $base = $this->xpath->evaluate("string(ancestor-or-self::*[@xml:base][1]/@xml:base)", $link); + + if ($base) + return rewrite_relative_url($base, trim($link->getAttribute("href"))); + else + return trim($link->getAttribute("href")); + } } } @@ -38,7 +55,7 @@ class FeedItem_Atom { $title = $this->elem->getElementsByTagName("title")->item(0); if ($title) { - return $title->nodeValue; + return trim($title->nodeValue); } } @@ -46,25 +63,40 @@ class FeedItem_Atom { $content = $this->elem->getElementsByTagName("content")->item(0); if ($content) { + if ($content->hasAttribute('type')) { + if ($content->getAttribute('type') == 'xhtml') { + for ($i = 0; $i < $content->childNodes->length; $i++) { + $child = $content->childNodes->item($i); + + if ($child->hasChildNodes()) { + return $this->doc->saveXML($child); + } + } + } + } + return $content->nodeValue; } } function get_description() { - $summary = $this->elem->getElementsByTagName("summary")->item(0); - - if ($summary) { - return $summary->nodeValue; - } - } - - // todo - function get_comments_url() { + $content = $this->elem->getElementsByTagName("summary")->item(0); - } + if ($content) { + if ($content->hasAttribute('type')) { + if ($content->getAttribute('type') == 'xhtml') { + for ($i = 0; $i < $content->childNodes->length; $i++) { + $child = $content->childNodes->item($i); + + if ($child->hasChildNodes()) { + return $this->doc->saveXML($child); + } + } + } + } - // todo - function get_comments_count() { + return $content->nodeValue; + } } @@ -74,9 +106,14 @@ class FeedItem_Atom { foreach ($categories as $cat) { if ($cat->hasAttribute("term")) - array_push($cats, $cat->getAttribute("term")); + array_push($cats, trim($cat->getAttribute("term"))); } + $categories = $this->xpath->query("dc:subject", $this->elem); + + foreach ($categories as $cat) { + array_push($cats, trim($cat->nodeValue)); + } return $cats; } @@ -100,22 +137,65 @@ class FeedItem_Atom { } } - return $encs; - } + $enclosures = $this->xpath->query("media:content", $this->elem); + + foreach ($enclosures as $enclosure) { + $enc = new FeedEnclosure(); + + $enc->type = $enclosure->getAttribute("type"); + $enc->link = $enclosure->getAttribute("url"); + $enc->length = $enclosure->getAttribute("length"); + $enc->height = $enclosure->getAttribute("height"); + $enc->width = $enclosure->getAttribute("width"); + + $desc = $this->xpath->query("media:description", $enclosure)->item(0); + if ($desc) $enc->title = strip_tags($desc->nodeValue); + + array_push($encs, $enc); + } - function get_author() { - $author = $this->elem->getElementsByTagName("author")->item(0); - if ($author) { - $name = $author->getElementsByTagName("name")->item(0); + $enclosures = $this->xpath->query("media:group", $this->elem); - if ($name) return $name->nodeValue; + foreach ($enclosures as $enclosure) { + $enc = new FeedEnclosure(); - $email = $author->getElementsByTagName("email")->item(0); + $content = $this->xpath->query("media:content", $enclosure)->item(0); - if ($email) return $email->nodeValue; + if ($content) { + $enc->type = $content->getAttribute("type"); + $enc->link = $content->getAttribute("url"); + $enc->length = $content->getAttribute("length"); + $enc->height = $content->getAttribute("height"); + $enc->width = $content->getAttribute("width"); + $desc = $this->xpath->query("media:description", $content)->item(0); + if ($desc) { + $enc->title = strip_tags($desc->nodeValue); + } else { + $desc = $this->xpath->query("media:description", $enclosure)->item(0); + if ($desc) $enc->title = strip_tags($desc->nodeValue); + } + + array_push($encs, $enc); + } } + + $enclosures = $this->xpath->query("media:thumbnail", $this->elem); + + foreach ($enclosures as $enclosure) { + $enc = new FeedEnclosure(); + + $enc->type = "image/generic"; + $enc->link = $enclosure->getAttribute("url"); + $enc->height = $enclosure->getAttribute("height"); + $enc->width = $enclosure->getAttribute("width"); + + array_push($encs, $enc); + } + + return $encs; } + } ?>