diff options
author | Evan Prodromou <evan@status.net> | 2010-09-03 17:34:10 -0400 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2010-09-03 17:34:10 -0400 |
commit | 8b34978892e0302e09ec471d03fabcb1cc4cf9a3 (patch) | |
tree | e8dc315f3d04f956b1c51f8cd24d3b97774aefd9 | |
parent | 0e356d01c13408d0541b0dc04111f613c8d33120 (diff) |
do a real retweet for a local repeat
-rw-r--r-- | plugins/TwitterBridge/twitter.php | 34 | ||||
-rw-r--r-- | plugins/TwitterBridge/twitteroauthclient.php | 15 |
2 files changed, 45 insertions, 4 deletions
diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php index 9c2ba502b..20cdf42b8 100644 --- a/plugins/TwitterBridge/twitter.php +++ b/plugins/TwitterBridge/twitter.php @@ -145,17 +145,43 @@ function broadcast_twitter($notice) $flink = Foreign_link::getByUserID($notice->profile_id, TWITTER_SERVICE); - if (is_twitter_bound($notice, $flink)) { - if (TwitterOAuthClient::isPackedToken($flink->credentials)) { + // Don't bother with basic auth, since it's no longer allowed + + if (!empty($flink) && TwitterOAuthClient::isPackedToken($flink->credentials)) { + if (!empty($notice->repeat_of) && is_twitter_notice($notice->repeat_of)) { + return retweet_notice($flink, Notice::staticGet('id', $notice->repeat_of)); + } else if (is_twitter_bound($notice, $flink)) { return broadcast_oauth($notice, $flink); - } else { - return broadcast_basicauth($notice, $flink); } } return true; } +function retweet_notice($flink, $notice) +{ + $token = TwitterOAuthClient::unpackToken($flink->credentials); + $client = new TwitterOAuthClient($token->key, $token->secret); + + $id = twitter_status_id($notice); + + try { + $status = $client->statusesRetweet($id); + } catch (OAuthClientException $e) { + return process_error($e, $flink, $notice); + } +} + +function twitter_status_id($notice) +{ + if ($notice->source == 'twitter' && + preg_match('#^http://twitter.com/[\w_.]+/status/(\d+)$#', $notice->uri, $match)) { + return $match[1]; + } + + return null; +} + /** * Pull any extra information from a notice that we should transfer over * to Twitter beyond the notice text itself. diff --git a/plugins/TwitterBridge/twitteroauthclient.php b/plugins/TwitterBridge/twitteroauthclient.php index d895d8c73..5e5761360 100644 --- a/plugins/TwitterBridge/twitteroauthclient.php +++ b/plugins/TwitterBridge/twitteroauthclient.php @@ -277,4 +277,19 @@ class TwitterOAuthClient extends OAuthClient return $ids; } + /** + * Calls Twitter's /statuses/retweet/id.json API method + * + * @param int $id id of the notice to retweet + * + * @return retweeted status + */ + + function statusesRetweet($id) + { + $url = "http://api.twitter.com/1/statuses/retweet/$id.json"; + $response = $this->oAuthPost($url); + $status = json_decode($response); + return $status; + } } |