diff options
author | Evan Prodromou <evan@prodromou.name> | 2008-05-22 07:29:54 -0400 |
---|---|---|
committer | Evan Prodromou <evan@prodromou.name> | 2008-05-22 07:29:54 -0400 |
commit | 310ef22fd996a21642cc63b33829cc1f397269d7 (patch) | |
tree | bc1f4088703abd351118b614a0f133198f23d549 /lib | |
parent | 5d0bd93eb3e958b41113afdce85643a82a1f5bb3 (diff) |
abstract out RSS 1.0 generation to allow multiple streams
darcs-hash:20080522112954-84dde-aa5087977298f5169148383e82e22241e613b1f2.gz
Diffstat (limited to 'lib')
-rw-r--r-- | lib/action.php | 12 | ||||
-rw-r--r-- | lib/rssaction.php | 133 |
2 files changed, 145 insertions, 0 deletions
diff --git a/lib/action.php b/lib/action.php index c346c7513..67eaf9ed7 100644 --- a/lib/action.php +++ b/lib/action.php @@ -46,4 +46,16 @@ class Action { // lawsuit $this->args[$k] = ($strip) ? stripslashes($v) : $v; } } + + function boolean($key, $def=false) { + $arg = $this->arg($key); + return (is_null($arg)) ? $def : + (strcasecmp($arg, 'true')) ? true : + (strcasecmp($arg, 'yes')) ? true : + (strcasecmp($arg, '1')) ? true : + (strcasecmp($arg, 'false')) ? false : + (strcasecmp($arg, 'no')) ? false : + (strcasecmp($arg, '0')) ? false : + $def; + } } diff --git a/lib/rssaction.php b/lib/rssaction.php new file mode 100644 index 000000000..9d4066ee5 --- /dev/null +++ b/lib/rssaction.php @@ -0,0 +1,133 @@ +<?php +/* + * Laconica - a distributed open-source microblogging tool + * Copyright (C) 2008, Controlez-Vous, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +if (!defined('LACONICA')) { exit(1); } + +class Rss10Action extends Action { + + function handle($args) { + parent::handle($args); + + $limit = (int) $this->trimmed('limit'); + + $this->show_rss($limit); + } + + function init() { + return true; + } + + function get_notices() { + return array(); + } + + function get_channel() { + return array('url' => '', + 'title' => '', + 'link' => '', + 'description' => ''); + } + + function get_image() { + return NULL; + } + + function show_rss($limit=0) { + + if (!$this->init()) { + return; + } + + $notices = $this->get_notices($limit); + + $this->init_rss(); + $this->show_channel($notices); + $this->show_image(); + + foreach ($notices as $n) { + $this->show_item($n); + } + + $this->end_rss(); + } + + function show_channel($notices) { + + $channel = $this->get_channel(); + $image = $this->get_image(); + + common_element_start('channel', array('rdf:about' => $channel['url'])); + common_element('title', NULL, $channel['title']); + common_element('link', NULL, $channel['link']); + common_element('description', NULL, $channel['description']); + + if ($image) { + common_element('image', array('rdf:resource' => $image)); + } + + common_element_start('items'); + common_element_start('rdf:Seq'); + foreach ($notices as $n) { + common_element('rdf:li', array('rdf:resource' => + common_local_url('shownotice', + array('notice' => $n->id)))); + } + + common_element_end('rdf:Seq'); + common_element_end('items'); + common_element_end('channel'); + } + + function show_image() { + $image = $this->get_image(); + if ($image) { + $channel = $this->get_channel(); + common_element_start('image', array('rdf:about' => $image)); + common_element('title', NULL, $channel['title']); + common_element('link', NULL, $channel['link']); + common_element('url', NULL, $image); + common_element_end('image'); + } + } + + function show_item($notice) { + $nurl = common_local_url('shownotice', array('notice' => $notice->id)); + common_element_start('item', array('rdf:about' => $nurl)); + common_element('title', NULL, $notice->created); + common_element('link', NULL, $nurl); + common_element('description', NULL, common_render_content($notice->content)); + common_element('dc:date', NULL, common_date_w3dtf($notice->created)); + common_element_end('item'); + } + + function init_rss() { + header('Content-Type: application/rdf+xml'); + + common_start_xml(); + common_element_start('rdf:RDF', array('xmlns:rdf' => + 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + 'xmlns:dc' => + 'http://purl.org/dc/elements/1.1/', + 'xmlns' => 'http://purl.org/rss/1.0/')); + } + + function end_rss() { + common_element_end('rdf:RDF'); + } +}
\ No newline at end of file |