From 412eae10fe81c6493f3ca5e05d7365839045f54e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 28 Aug 2008 15:25:09 -0400 Subject: Twitter integration - Notices now broadcast (directly) to Twitter from linked accts. darcs-hash:20080828192509-7b5ce-8387c67500c082eb5a0107c0f78d4cf5620825af.gz --- lib/util.php | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'lib/util.php') diff --git a/lib/util.php b/lib/util.php index 0ac679afc..016821c57 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1088,6 +1088,16 @@ function common_save_replies($notice) { } function common_broadcast_notice($notice, $remote=false) { + + // Check to see if notice should go to Twitter + $flink = Foreign_link::getForeignLink($notice->profile_id, 1); // 1 == Twitter + + if ($flink) { + if (!common_twitter_broadcast($notice, $flink)) { + common_debug('Unable to send notice: ' . $notice->id . ' to Twitter.', __FILE__); + } + } + if (common_config('queue', 'enabled')) { # Do it later! return common_enqueue_notice($notice); @@ -1096,6 +1106,61 @@ function common_broadcast_notice($notice, $remote=false) { } } +function common_twitter_broadcast($notice, $flink) { + $success = true; + $fuser = $flink->getForeignUser(); + $twitter_user = $fuser->nickname; + $twitter_password = $flink->credentials; + $uri = 'http://www.twitter.com/statuses/update.json'; + $statustxt = $notice->content; + + $options = array( + CURLOPT_USERPWD => "$twitter_user:$twitter_password", + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => array( + 'status' => $statustxt, + 'source' => 'Laconica' + ), + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FAILONERROR => true, + CURLOPT_HEADER => false, + CURLOPT_FOLLOWLOCATION => true, + // CURLOPT_USERAGENT => "identi.ca", + CURLOPT_CONNECTTIMEOUT => 120, // XXX: Scary!!!! How long should this be? + CURLOPT_TIMEOUT => 120 + ); + + $ch = curl_init($uri); + curl_setopt_array($ch, $options); + $data = curl_exec($ch); + $errmsg = curl_error($ch); + + if ($errmsg) { + common_debug("cURL error: $errmsg - trying to send notice for $twitter_user.", + __FILE__); + $success = false; + } + + curl_close($ch); + + if (!$data) { + common_debug("No data returned by Twitter's API trying to send update for $twitter_user", + __FILE__); + $success = false; + } + + // Twitter should return a status + $status = json_decode($data); + + if (!$status->id) { + common_debug("Unexpected data returned by Twitter API trying to send update for $twitter_user", + __FILE__); + $success = false; + } + + return $status; +} + # Stick the notice on the queue function common_enqueue_notice($notice) { -- cgit v1.2.3-54-g00ecf