From 04d2f9c831b14f7295a3475746b9096402a055f0 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 17:38:16 +0400 Subject: add basic rss support --- classes/feeditem/rss.php | 107 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 classes/feeditem/rss.php (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php new file mode 100644 index 000000000..e7ea1df57 --- /dev/null +++ b/classes/feeditem/rss.php @@ -0,0 +1,107 @@ +elem = $elem; + } + + function get_id() { + return $this->get_link(); + } + + function get_date() { + $pubDate = $this->elem->getElementsByTagName("pubDate")->item(0); + + if ($pubDate) { + return strtotime($pubDate->nodeValue); + } + } + + function get_link() { + $link = $this->elem->getElementsByTagName("link")->item(0); + + if ($link) { + return $link->nodeValue; + } + } + + function get_title() { + $title = $this->elem->getElementsByTagName("title")->item(0); + + if ($title) { + return $title->nodeValue; + } + } + + function get_content() { + $content = $this->elem->getElementsByTagName("description")->item(0); + + if ($content) { + return $content->nodeValue; + } + } + + function get_description() { + $summary = $this->elem->getElementsByTagName("description")->item(0); + + if ($summary) { + return $summary->nodeValue; + } + } + + // todo + function get_comments_url() { + + } + + // todo + function get_comments_count() { + + } + + function get_categories() { + $categories = $this->elem->getElementsByTagName("category"); + $cats = array(); + + foreach ($categories as $cat) { + array_push($cats, $cat->nodeValue); + } + + return $cats; + } + + function get_enclosures() { + $enclosures = $this->elem->getElementsByTagName("enclosure"); + + $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; + } + + function get_author() { + $author = $this->elem->getElementsByTagName("author")->item(0); + + if ($author) { + $name = $author->getElementsByTagName("name")->item(0); + + if ($name) return $name->nodeValue; + + $email = $author->getElementsByTagName("email")->item(0); + + if ($email) return $email->nodeValue; + + } + } +} +?> -- cgit v1.2.3 From b09a4cdccc0d8c85af5d5a97be32536579b9db33 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 19:12:32 +0400 Subject: feeditem_rss: use guid element --- classes/feeditem/rss.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php index e7ea1df57..d5667102d 100644 --- a/classes/feeditem/rss.php +++ b/classes/feeditem/rss.php @@ -7,7 +7,13 @@ class FeedItem_RSS { } function get_id() { - return $this->get_link(); + $id = $this->elem->getElementsByTagName("guid")->item(0); + + if ($id) { + return $id->nodeValue; + } else { + return $this->get_link(); + } } function get_date() { -- cgit v1.2.3 From 4c00e15b5d05b0d137af9a33bf79172bfeb0df24 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 19:40:43 +0400 Subject: pass xpath object to feeditem, support media-rss objects --- classes/feeditem/rss.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php index d5667102d..e5e2a8e56 100644 --- a/classes/feeditem/rss.php +++ b/classes/feeditem/rss.php @@ -1,9 +1,11 @@ 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; } -- cgit v1.2.3 From d4992d6b48ed458ae3ff39c5cd5ac19244ccd6a8 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 20:55:08 +0400 Subject: add support for dc:subject and slash:comments --- classes/feeditem/rss.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php index e5e2a8e56..7a3b0d342 100644 --- a/classes/feeditem/rss.php +++ b/classes/feeditem/rss.php @@ -63,9 +63,12 @@ class FeedItem_RSS { } - // todo function get_comments_count() { + $comments = $this->xpath->query("slash:comments", $this->elem)->item(0); + if ($comments) { + return $comments->nodeValue; + } } function get_categories() { @@ -76,6 +79,12 @@ class FeedItem_RSS { array_push($cats, $cat->nodeValue); } + $categories = $this->xpath->query("dc:subject", $this->elem); + + foreach ($categories as $cat) { + array_push($cats, $cat->nodeValue); + } + return $cats; } @@ -96,8 +105,6 @@ class FeedItem_RSS { $enclosures = $this->xpath->query("media:content", $this->elem); - $encs = array(); - foreach ($enclosures as $enclosure) { $enc = new FeedEnclosure(); -- cgit v1.2.3 From f11015058d6e313d3cabc3d3edc0230a5b6b4c26 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 21:01:30 +0400 Subject: support dc:creator --- classes/feeditem/rss.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php index 7a3b0d342..9e54a9c09 100644 --- a/classes/feeditem/rss.php +++ b/classes/feeditem/rss.php @@ -129,8 +129,14 @@ class FeedItem_RSS { $email = $author->getElementsByTagName("email")->item(0); if ($email) return $email->nodeValue; + } + + $author = $this->xpath->query("dc:creator", $this->elem)->item(0); + if ($author) { + return $author->nodeValue; } + } } ?> -- cgit v1.2.3 From b4d1690097946bdf89dc88f218e7790126f4fd3b Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 21:06:48 +0400 Subject: move common methods to feeditem_common --- classes/feeditem/rss.php | 43 +------------------------------------------ 1 file changed, 1 insertion(+), 42 deletions(-) (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php index 9e54a9c09..29c8cb6b4 100644 --- a/classes/feeditem/rss.php +++ b/classes/feeditem/rss.php @@ -1,13 +1,5 @@ elem = $elem; - $this->xpath = $xpath; - } - +class FeedItem_RSS extends FeedItem_Common { function get_id() { $id = $this->elem->getElementsByTagName("guid")->item(0); @@ -58,19 +50,6 @@ class FeedItem_RSS { } } - // todo - function get_comments_url() { - - } - - function get_comments_count() { - $comments = $this->xpath->query("slash:comments", $this->elem)->item(0); - - if ($comments) { - return $comments->nodeValue; - } - } - function get_categories() { $categories = $this->elem->getElementsByTagName("category"); $cats = array(); @@ -118,25 +97,5 @@ class FeedItem_RSS { return $encs; } - function get_author() { - $author = $this->elem->getElementsByTagName("author")->item(0); - - if ($author) { - $name = $author->getElementsByTagName("name")->item(0); - - if ($name) return $name->nodeValue; - - $email = $author->getElementsByTagName("email")->item(0); - - if ($email) return $email->nodeValue; - } - - $author = $this->xpath->query("dc:creator", $this->elem)->item(0); - - if ($author) { - return $author->nodeValue; - } - - } } ?> -- cgit v1.2.3 From 8a95d630a9183bf2c7b79f9e1f015eec328d8804 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 May 2013 22:05:59 +0400 Subject: fix rss content:encoded not used --- classes/feeditem/rss.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php index 29c8cb6b4..5b43d0e8c 100644 --- a/classes/feeditem/rss.php +++ b/classes/feeditem/rss.php @@ -40,6 +40,13 @@ class FeedItem_RSS extends FeedItem_Common { if ($content) { return $content->nodeValue; } + + $content = $this->xpath->query("content:encoded", $this->elem)->item(0); + + if ($content) { + return $content->nodeValue; + } + } function get_description() { -- cgit v1.2.3 From 99b82567944a96afb70ab7af1f0bd344ac3ab95a Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 2 May 2013 10:30:41 +0400 Subject: feedparser: make content:encoded take precedence over description --- classes/feeditem/rss.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'classes/feeditem/rss.php') diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php index 5b43d0e8c..2f363b4f6 100644 --- a/classes/feeditem/rss.php +++ b/classes/feeditem/rss.php @@ -35,18 +35,17 @@ class FeedItem_RSS extends FeedItem_Common { } function get_content() { - $content = $this->elem->getElementsByTagName("description")->item(0); + $content = $this->xpath->query("content:encoded", $this->elem)->item(0); if ($content) { return $content->nodeValue; } - $content = $this->xpath->query("content:encoded", $this->elem)->item(0); + $content = $this->elem->getElementsByTagName("description")->item(0); if ($content) { return $content->nodeValue; } - } function get_description() { -- cgit v1.2.3