forked from GNUsocial/gnu-social
handle RSS as well as Atom in Ostatus push hits
This commit is contained in:
parent
65c8dc313c
commit
f558508784
@ -388,11 +388,17 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
{
|
{
|
||||||
$feed = $doc->documentElement;
|
$feed = $doc->documentElement;
|
||||||
|
|
||||||
if ($feed->localName != 'feed' || $feed->namespaceURI != Activity::ATOM) {
|
if ($feed->localName == 'feed' && $feed->namespaceURI == Activity::ATOM) {
|
||||||
common_log(LOG_ERR, __METHOD__ . ": not an Atom feed, ignoring");
|
$this->processAtomFeed($feed, $source);
|
||||||
return;
|
} else if ($feed->localName == 'rss') { // @fixme check namespace
|
||||||
|
$this->processRssFeed($feed, $source);
|
||||||
|
} else {
|
||||||
|
throw new Exception("Unknown feed format.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function processAtomFeed(DOMElement $feed, $source)
|
||||||
|
{
|
||||||
$entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
|
$entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
|
||||||
if ($entries->length == 0) {
|
if ($entries->length == 0) {
|
||||||
common_log(LOG_ERR, __METHOD__ . ": no entries in feed update, ignoring");
|
common_log(LOG_ERR, __METHOD__ . ": no entries in feed update, ignoring");
|
||||||
@ -405,6 +411,26 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function processRssFeed(DOMElement $rss, $source)
|
||||||
|
{
|
||||||
|
$channels = $rss->getElementsByTagName('channel');
|
||||||
|
|
||||||
|
if ($channels->length == 0) {
|
||||||
|
throw new Exception("RSS feed without a channel.");
|
||||||
|
} else if ($channels->length > 1) {
|
||||||
|
common_log(LOG_WARNING, __METHOD__ . ": more than one channel in an RSS feed");
|
||||||
|
}
|
||||||
|
|
||||||
|
$channel = $channels->item(0);
|
||||||
|
|
||||||
|
$items = $channel->getElementsByTagName('item');
|
||||||
|
|
||||||
|
for ($i = 0; $i < $items->length; $i++) {
|
||||||
|
$item = $items->item($i);
|
||||||
|
$this->processEntry($item, $channel, $source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process a posted entry from this feed source.
|
* Process a posted entry from this feed source.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user