do a real retweet for a local repeat

This commit is contained in:
Evan Prodromou 2010-09-03 17:34:10 -04:00
parent 0e356d01c1
commit 8b34978892
2 changed files with 45 additions and 4 deletions

View File

@ -145,17 +145,43 @@ function broadcast_twitter($notice)
$flink = Foreign_link::getByUserID($notice->profile_id, $flink = Foreign_link::getByUserID($notice->profile_id,
TWITTER_SERVICE); TWITTER_SERVICE);
if (is_twitter_bound($notice, $flink)) { // Don't bother with basic auth, since it's no longer allowed
if (TwitterOAuthClient::isPackedToken($flink->credentials)) {
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); return broadcast_oauth($notice, $flink);
} else {
return broadcast_basicauth($notice, $flink);
} }
} }
return true; 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 * Pull any extra information from a notice that we should transfer over
* to Twitter beyond the notice text itself. * to Twitter beyond the notice text itself.

View File

@ -277,4 +277,19 @@ class TwitterOAuthClient extends OAuthClient
return $ids; 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;
}
} }