add basic rss support
This commit is contained in:
parent
cd07592c29
commit
04d2f9c831
|
@ -17,8 +17,11 @@ class FeedItem_Atom {
|
|||
}
|
||||
|
||||
function get_date() {
|
||||
$updated = $this->elem->getElementsByTagName("updated")->item(0);
|
||||
|
||||
|
||||
if ($updated) {
|
||||
return strtotime($updated->nodeValue);
|
||||
}
|
||||
}
|
||||
|
||||
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() {
|
||||
$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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -549,7 +549,9 @@
|
|||
|
||||
$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()) {
|
||||
$entry_timestamp = time();
|
||||
|
|
Loading…
Reference in New Issue