From 7b2367164ea8065754db9c92ec10dfb9ac685527 Mon Sep 17 00:00:00 2001 From: zach Date: Wed, 16 Jul 2008 03:21:24 -0400 Subject: [PATCH] Twitter-compatible API: public_timeline.rss mostly working darcs-hash:20080716072124-ca946-6714d13d6801eddf84800b884721aac37852993d.gz --- actions/twitapistatuses.php | 33 ++++++++++++++++++++++++++++-- lib/twitterapi.php | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php index 83fd4b53c0..d1f9579425 100644 --- a/actions/twitapistatuses.php +++ b/actions/twitapistatuses.php @@ -47,12 +47,13 @@ class TwitapistatusesAction extends TwitterapiAction { $cnt = $notice->find(); if ($apidata['content-type'] == 'xml') { + header('Content-Type: application/xml; charset=utf-8'); common_start_xml(); // XXX: To really live up to the spec we need to build a list - // of notices by users who have custom avatars + // of notices by users who have custom avatars -- Zach if ($cnt > 0) { common_element_start('statuses', array('type' => 'array')); for ($i = 0; $i < 20; $i++) { @@ -69,7 +70,35 @@ class TwitapistatusesAction extends TwitterapiAction { common_end_xml(); } elseif ($apidata['content-type'] == 'rss') { - common_server_error("API method under construction.", $code=501); + + //header('Content-Type: application/xml; charset=utf-8'); + + header("Content-Type: application/rss+xml; charset=utf-8"); + + $this->init_twitter_rss(); + + common_element_start('channel'); + common_element('title', NULL, 'Identi.ca public timeline'); + common_element('link', NULL, 'http://www.identi.ca'); + common_element('description', NULL, 'Identi.ca updates from everyone!'); + common_element('language', NULL, 'en-us'); + common_element('ttl', NULL, '40'); // 40 what? + + if ($cnt > 0) { + for ($i = 0; $i < 20; $i++) { + if ($notice->fetch()) { + $twitter_status = $this->twitter_status_array($notice); + $this->show_twitter_rss_item($twitter_status); + } else { + // shouldn't happen! + break; + } + } + } + common_element_end('channel'); + + $this->end_twitter_rss(); + } elseif ($apidata['content-type'] == 'atom') { common_server_error("API method under construction.", $code=501); } elseif ($apidata['content-type'] == 'json') { diff --git a/lib/twitterapi.php b/lib/twitterapi.php index 708630247c..012057861f 100644 --- a/lib/twitterapi.php +++ b/lib/twitterapi.php @@ -154,4 +154,44 @@ class TwitterapiAction extends Action { return NULL; } + function init_twitter_rss() { + + common_start_xml(); + common_element_start('rss', array('version' => '2.0')); + } + + function end_twitter_rss() { + + common_element_end('rss'); + common_end_xml(); + + } + + function get_twitter_channel() { + + } + +/* + + + CapitalD: @baxterd Have you read The Conquest of Cool? It looks interesting to me... + CapitalD: @baxterd Have you read The Conquest of Cool? It looks interesting to me... + Mon, 14 Jul 2008 23:54:13 +0000 + http://twitter.com/CapitalD/statuses/858499551 + http://twitter.com/CapitalD/statuses/858499551 + + +*/ + + function show_twitter_rss_item($twitter_status) { + common_element_start('item'); + common_element('title', NULL, "{$twitter_status[user][screen_name]}: $twitter_status[text]"); + common_element('description', NULL, "{$twitter_status[user][screen_name]}: $twitter_status[text]"); + common_element('pubDate', NULL, "$twitter_status[created_at]"); + common_element('guid', NULL, "$twitter_status[id]"); + common_element('link', NULL, "$twitter_status[id]"); + common_element_end('item'); + } + + } \ No newline at end of file