summaryrefslogtreecommitdiff
path: root/modules/aggregator.module
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2005-08-11 13:12:44 +0000
committerDries Buytaert <dries@buytaert.net>2005-08-11 13:12:44 +0000
commit6733014fc40a38dc031c9f4f1292f0c647671ca0 (patch)
treeb475b98516b86aba5aedf177a99dc3d72501350a /modules/aggregator.module
parent7c6a21aedda5a6e918f54053c8a2829a248d536b (diff)
downloadbrdo-6733014fc40a38dc031c9f4f1292f0c647671ca0.tar.gz
brdo-6733014fc40a38dc031c9f4f1292f0c647671ca0.tar.bz2
- Patch #13941 by Prometheus6: made the aggregator module parse Atom feeds.
Diffstat (limited to 'modules/aggregator.module')
-rw-r--r--modules/aggregator.module47
1 files changed, 45 insertions, 2 deletions
diff --git a/modules/aggregator.module b/modules/aggregator.module
index de0771246..f1f367136 100644
--- a/modules/aggregator.module
+++ b/modules/aggregator.module
@@ -275,16 +275,38 @@ function aggregator_remove($feed) {
* Call-back function used by the XML parser.
*/
function aggregator_element_start($parser, $name, $attributes) {
- global $item, $element, $tag;
+ global $item, $element, $tag, $items, $channel;
switch ($name) {
case 'IMAGE':
case 'TEXTINPUT':
+ case 'CONTENT':
+ case 'SUMMARY':
+ case 'TAGLINE':
+ case 'SUBTITLE':
+ case 'LOGO':
+ case 'INFO':
+ case 'ID':
$element = $name;
break;
+ case 'LINK':
+ if ($attributes['REL'] == 'alternate') {
+ if ($element == 'ITEM') {
+ $items[$item]['LINK'] = $attributes['HREF'];
+ }
+ else {
+ $channel['LINK'] = $attributes['HREF'];
+ }
+ }
+ break;
case 'ITEM':
$element = $name;
$item += 1;
+ break;
+ case 'ENTRY':
+ $element = 'ITEM';
+ $item += 1;
+ break;
}
$tag = $name;
@@ -300,6 +322,10 @@ function aggregator_element_end($parser, $name) {
case 'IMAGE':
case 'TEXTINPUT':
case 'ITEM':
+ case 'ENTRY':
+ case 'CONTENT':
+ case 'INFO':
+ case 'ID':
$element = '';
}
}
@@ -315,8 +341,26 @@ function aggregator_element_data($parser, $data) {
$items[$item][$tag] .= $data;
break;
case 'IMAGE':
+ case 'LOGO':
$image[$tag] .= $data;
break;
+ case 'LINK':
+ if ($data) {
+ $items[$item][$tag] .= $data;
+ }
+ break;
+ case 'CONTENT':
+ $items[$item]['DESCRIPTION'] .= $data;
+ break;
+ case 'SUMMARY':
+ $items[$item]['DESCRIPTION'] .= $data;
+ break;
+ case 'TAGLINE':
+ case 'SUBTITLE':
+ $channel['DESCRIPTION'] .= $data;
+ break;
+ case 'INFO':
+ case 'ID':
case 'TEXTINPUT':
// The sub-element is not supported. However, we must recognize
// it or its contents will end up in the item array.
@@ -488,7 +532,6 @@ function aggregator_parse_feed(&$data, $feed) {
$value = preg_replace('/\Won[a-z]+\s*=[^>]+?>/i', '>', $value);
$item[$key] = $value;
}
-
/*
** Resolve the item's title. If no title is found, we use
** up to 40 characters of the description ending at a word