add basic rss support
This commit is contained in:
parent
cd07592c29
commit
04d2f9c831
|
@ -17,8 +17,11 @@ class FeedItem_Atom {
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_date() {
|
function get_date() {
|
||||||
|
$updated = $this->elem->getElementsByTagName("updated")->item(0);
|
||||||
|
|
||||||
|
if ($updated) {
|
||||||
|
return strtotime($updated->nodeValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_link() {
|
function get_link() {
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
<?php
|
||||||
|
class FeedItem_RSS {
|
||||||
|
private $elem;
|
||||||
|
|
||||||
|
function __construct($elem) {
|
||||||
|
$this->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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -24,10 +24,14 @@ class FeedParser {
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
$root = $this->doc->firstChild;
|
$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) {
|
if ($root) {
|
||||||
switch ($root->tagName) {
|
switch ($root->tagName) {
|
||||||
case "rss":
|
case "channel":
|
||||||
$this->type = $this::FEED_RSS;
|
$this->type = $this::FEED_RSS;
|
||||||
break;
|
break;
|
||||||
case "feed":
|
case "feed":
|
||||||
|
@ -38,11 +42,8 @@ class FeedParser {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$xpath = new DOMXPath($this->doc);
|
|
||||||
|
|
||||||
switch ($this->type) {
|
switch ($this->type) {
|
||||||
case $this::FEED_ATOM:
|
case $this::FEED_ATOM:
|
||||||
$xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
|
|
||||||
|
|
||||||
$title = $xpath->query("//atom:feed/atom:title")->item(0);
|
$title = $xpath->query("//atom:feed/atom:title")->item(0);
|
||||||
|
|
||||||
|
@ -67,6 +68,25 @@ class FeedParser {
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case $this::FEED_RSS:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -549,7 +549,9 @@
|
||||||
|
|
||||||
$entry_timestamp = "";
|
$entry_timestamp = "";
|
||||||
|
|
||||||
$entry_timestamp = strtotime($item->get_date());
|
$entry_timestamp = $item->get_date();
|
||||||
|
|
||||||
|
_debug("orig date: " . $item->get_date(), $debug_enabled);
|
||||||
|
|
||||||
if ($entry_timestamp == -1 || !$entry_timestamp || $entry_timestamp > time()) {
|
if ($entry_timestamp == -1 || !$entry_timestamp || $entry_timestamp > time()) {
|
||||||
$entry_timestamp = time();
|
$entry_timestamp = time();
|
||||||
|
|
Loading…
Reference in New Issue