summaryrefslogtreecommitdiff
path: root/classes/feedparser.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2013-05-01 17:38:16 +0400
committerAndrew Dolgov <[email protected]>2013-05-01 17:38:16 +0400
commit04d2f9c831b14f7295a3475746b9096402a055f0 (patch)
treee89902e87dd266ce6ba5083c3c3d058da405a245 /classes/feedparser.php
parentcd07592c29391ca374f78a75a10465f894d50042 (diff)
add basic rss support
Diffstat (limited to 'classes/feedparser.php')
-rw-r--r--classes/feedparser.php28
1 files changed, 24 insertions, 4 deletions
diff --git a/classes/feedparser.php b/classes/feedparser.php
index 274e871b9..fb6344cc0 100644
--- a/classes/feedparser.php
+++ b/classes/feedparser.php
@@ -24,10 +24,14 @@ class FeedParser {
function init() {
$root = $this->doc->firstChild;
+ $xpath = new DOMXPath($this->doc);
+ $xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
+
+ $root = $xpath->query("(//atom:feed|//channel)")->item(0);
if ($root) {
switch ($root->tagName) {
- case "rss":
+ case "channel":
$this->type = $this::FEED_RSS;
break;
case "feed":
@@ -38,11 +42,8 @@ class FeedParser {
return;
}
- $xpath = new DOMXPath($this->doc);
-
switch ($this->type) {
case $this::FEED_ATOM:
- $xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
$title = $xpath->query("//atom:feed/atom:title")->item(0);
@@ -67,6 +68,25 @@ class FeedParser {
break;
case $this::FEED_RSS:
+
+ $title = $xpath->query("//channel/title")->item(0);
+
+ if ($title) {
+ $this->title = $title->nodeValue;
+ }
+
+ $link = $xpath->query("//channel/link")->item(0);
+
+ if ($link && $link->hasAttributes()) {
+ $this->link = $link->getAttribute("href");
+ }
+
+ $articles = $xpath->query("//channel/item");
+
+ foreach ($articles as $article) {
+ array_push($this->items, new FeedItem_RSS($article));
+ }
+
break;
}
}