From 00a6f3d01510e01a5dcc0999a50fba7bafbcd5e1 Mon Sep 17 00:00:00 2001 From: zach Date: Sun, 20 Jul 2008 00:47:56 -0400 Subject: [PATCH] Twitter-compatible API: /account/update_location implemented darcs-hash:20080720044756-ca946-2e0823506b352d8364f84b77af644b8fc7f1a00d.gz --- actions/twitapiaccount.php | 42 +++++++++++++++++++++++++++++++++++-- actions/twitapistatuses.php | 38 +-------------------------------- lib/twitterapi.php | 36 +++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 39 deletions(-) diff --git a/actions/twitapiaccount.php b/actions/twitapiaccount.php index 0198671e77..3a0fd85447 100644 --- a/actions/twitapiaccount.php +++ b/actions/twitapiaccount.php @@ -46,10 +46,48 @@ class TwitapiaccountAction extends TwitterapiAction { function update_location($args, $apidata) { parent::handle($args); - common_server_error("API method under construction.", $code=501); + + $location = trim($this->arg('location')); + + if (!is_null($location) && strlen($location) > 255) { + + // XXX: Twitter just truncates and runs with it. + header('HTTP/1.1 406 Not Acceptable'); + print "That's too long. Max notice size is 255 chars.\n"; + exit(); + } + + $user = $apidata['user']; + $profile = $user->getProfile(); + + if (!$profile) { + common_server_error(_('User has no profile.')); + exit(); + } + + $orig_profile = clone($profile); + $profile->location = $location; + + common_debug('Old profile: ' . common_log_objstring($orig_profile), __FILE__); + common_debug('New profile: ' . common_log_objstring($profile), __FILE__); + + $result = $profile->update($orig_profile); + + if (!$result) { + common_log_db_error($profile, 'UPDATE', __FILE__); + common_server_error(_('Couldn\'t save profile.')); + exit(); + } + + common_broadcast_profile($profile); + + $apidata['api_arg'] = $user->id; + $this->show($args, $apidata); + exit(); } - + + function update_delivery_device($args, $apidata) { parent::handle($args); common_server_error("API method under construction.", $code=501); diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php index 96931fec63..d770d6ff39 100644 --- a/actions/twitapistatuses.php +++ b/actions/twitapistatuses.php @@ -315,7 +315,7 @@ class TwitapistatusesAction extends TwitterapiAction { if (!$profile) { common_server_error(_('User has no profile.')); - return; + exit(); } $count = $this->arg('count'); @@ -370,42 +370,6 @@ class TwitapistatusesAction extends TwitterapiAction { exit(); } - - function show($args, $apidata) { - parent::handle($args); - - $id = $apidata['api_arg']; - $notice = Notice::staticGet($id); - - if ($notice) { - - if ($apidata['content-type'] == 'xml') { - $this->show_single_xml_status($notice); - } elseif ($apidata['content-type'] == 'json') { - $this->show_single_json_status($notice); - } - } else { - header('HTTP/1.1 404 Not Found'); - } - - exit(); - } - - function show_single_xml_status($notice) { - header('Content-Type: application/xml; charset=utf-8'); - common_start_xml(); - $twitter_status = $this->twitter_status_array($notice); - $this->show_twitter_xml_status($twitter_status); - common_end_xml(); - exit(); - } - - function show_single_json_status($notice) { - header('Content-Type: application/json; charset=utf-8'); - $status = $this->twitter_status_array($notice); - $this->show_twitter_json_statuses($status); - exit(); - } function update($args, $apidata) { parent::handle($args); diff --git a/lib/twitterapi.php b/lib/twitterapi.php index f61ba9b671..06f491fb6e 100644 --- a/lib/twitterapi.php +++ b/lib/twitterapi.php @@ -161,6 +161,42 @@ class TwitterapiAction extends Action { function show_twitter_json_users($twitter_users) { print(json_encode($twitter_users)); } + + function show($args, $apidata) { + parent::handle($args); + + $id = $apidata['api_arg']; + $notice = Notice::staticGet($id); + + if ($notice) { + + if ($apidata['content-type'] == 'xml') { + $this->show_single_xml_status($notice); + } elseif ($apidata['content-type'] == 'json') { + $this->show_single_json_status($notice); + } + } else { + header('HTTP/1.1 404 Not Found'); + } + + exit(); + } + + function show_single_xml_status($notice) { + header('Content-Type: application/xml; charset=utf-8'); + common_start_xml(); + $twitter_status = $this->twitter_status_array($notice); + $this->show_twitter_xml_status($twitter_status); + common_end_xml(); + exit(); + } + + function show_single_json_status($notice) { + header('Content-Type: application/json; charset=utf-8'); + $status = $this->twitter_status_array($notice); + $this->show_twitter_json_statuses($status); + exit(); + } // Anyone know what date format this is? // Twitter's dates look like this: "Mon Jul 14 23:52:38 +0000 2008" -- Zach