]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Move/reorg Twitter broadcast code to lib/twitter.php in prep for
authorZach Copley <zach@controlyourself.ca>
Thu, 12 Feb 2009 01:46:53 +0000 (17:46 -0800)
committerZach Copley <zach@controlyourself.ca>
Thu, 12 Feb 2009 01:46:53 +0000 (17:46 -0800)
making a twitterqueuehandler.

actions/twittersettings.php
lib/twitter.php
lib/util.php

index 2d41469bba01b9c2456af282819b42d78052e96b..a79859bbf0a9205c40c25022913477b0a4d5193c 100644 (file)
@@ -32,6 +32,7 @@ if (!defined('LACONICA')) {
 }
 
 require_once INSTALLDIR.'/lib/connectsettingsaction.php';
+require_once INSTALLDIR.'/lib/twitter.php';
 
 define('SUBSCRIPTIONS', 80);
 
@@ -90,7 +91,7 @@ class TwittersettingsAction extends ConnectSettingsAction
 
         $fuser = null;
 
-        $flink = Foreign_link::getByUserID($user->id, 1); // 1 == Twitter
+        $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
 
         if ($flink) {
             $fuser = $flink->getForeignUser();
@@ -358,7 +359,7 @@ class TwittersettingsAction extends ConnectSettingsAction
 
         $flink->user_id     = $user->id;
         $flink->foreign_id  = $twit_user->id;
-        $flink->service     = 1; // Twitter
+        $flink->service     = TWITTER_SERVICE;
         $flink->credentials = $password;
         $flink->created     = common_sql_now();
 
index 1972985493a92b414d54667506b4983f86e80c44..72212c1851e95db30f324ba053866c494e567d84 100644 (file)
@@ -19,6 +19,8 @@
 
 if (!defined('LACONICA')) { exit(1); }
 
+define("TWITTER_SERVICE", 1); // Twitter is foreign_service ID 1
+
 function get_twitter_data($uri, $screen_name, $password)
 {
 
@@ -28,14 +30,13 @@ function get_twitter_data($uri, $screen_name, $password)
             CURLOPT_FAILONERROR        => true,
             CURLOPT_HEADER            => false,
             CURLOPT_FOLLOWLOCATION    => true,
-            # CURLOPT_USERAGENT        => "identi.ca",
+            CURLOPT_USERAGENT      => "Laconica",
             CURLOPT_CONNECTTIMEOUT    => 120,
             CURLOPT_TIMEOUT            => 120,
             # Twitter is strict about accepting invalid "Expect" headers
             CURLOPT_HTTPHEADER => array('Expect:')
     );
 
-
     $ch = curl_init($uri);
     curl_setopt_array($ch, $options);
     $data = curl_exec($ch);
@@ -95,7 +96,7 @@ function add_twitter_user($twitter_id, $screen_name)
     $fuser->nickname = $screen_name;
     $fuser->uri = 'http://twitter.com/' . $screen_name;
     $fuser->id = $twitter_id;
-    $fuser->service = 1; // Twitter
+    $fuser->service = TWITTER_SERVICE; // Twitter
     $fuser->created = common_sql_now();
     $result = $fuser->insert();
 
@@ -206,3 +207,93 @@ function save_twitter_friends($user, $twitter_id, $screen_name, $password)
     return true;
 }
 
+function is_twitter_bound($notice, $flink) {
+
+    // Check to see if notice should go to Twitter
+    if (($flink->noticesync & FOREIGN_NOTICE_SEND)) {
+
+        // If it's not a Twitter-style reply, or if the user WANTS to send replies.
+        if (!preg_match('/^@[a-zA-Z0-9_]{1,15}\b/u', $notice->content) ||
+            ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY)) {
+                return true;
+        }
+    }
+    
+    return false;
+}
+
+function broadcast_twitter($notice)
+{
+    global $config;
+    $success = true;
+
+    $flink = Foreign_link::getByUserID($notice->profile_id, 
+        TWITTER_SERVICE);
+            
+    // XXX: Not sure WHERE to check whether a notice should go to 
+    // Twitter. Should we even put in the queue if it's not? --Zach
+    if (is_twitter_bound($notice, $flink)) {
+
+        $fuser = $flink->getForeignUser();
+        $twitter_user = $fuser->nickname;
+        $twitter_password = $flink->credentials;
+        $uri = 'http://www.twitter.com/statuses/update.json';
+
+        // XXX: Hack to get around PHP cURL's use of @ being a a meta character
+        $statustxt = preg_replace('/^@/', ' @', $notice->content);
+
+        $options = array(
+            CURLOPT_USERPWD        => "$twitter_user:$twitter_password",
+            CURLOPT_POST           => true,
+            CURLOPT_POSTFIELDS     => 
+                array(
+                        'status' => $statustxt,
+                        'source' => $config['integration']['source']
+                     ),
+            CURLOPT_RETURNTRANSFER => true,
+            CURLOPT_FAILONERROR    => true,
+            CURLOPT_HEADER         => false,
+            CURLOPT_FOLLOWLOCATION => true,
+            CURLOPT_USERAGENT      => "Laconica",
+            CURLOPT_CONNECTTIMEOUT => 120,  // XXX: How long should this be?
+            CURLOPT_TIMEOUT        => 120,
+
+            # Twitter is strict about accepting invalid "Expect" headers
+            CURLOPT_HTTPHEADER => array('Expect:')
+            );
+
+        $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 $success;
+}
+
index c0c98011166c26b99a8b3d0aea6867cad9a2180d..3f4fae3a59e2d193e5001e7a41efad137b210202 100644 (file)
@@ -796,24 +796,6 @@ function common_redirect($url, $code=307)
 
 function common_broadcast_notice($notice, $remote=false)
 {
-
-    // Check to see if notice should go to Twitter
-    $flink = Foreign_link::getByUserID($notice->profile_id, 1); // 1 == Twitter
-    if (($flink->noticesync & FOREIGN_NOTICE_SEND) == FOREIGN_NOTICE_SEND) {
-
-        // If it's not a Twitter-style reply, or if the user WANTS to send replies...
-
-        if (!preg_match('/^@[a-zA-Z0-9_]{1,15}\b/u', $notice->content) ||
-            (($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) == FOREIGN_NOTICE_SEND_REPLY)) {
-
-            $result = common_twitter_broadcast($notice, $flink);
-
-            if (!$result) {
-                common_debug('Unable to send notice: ' . $notice->id . ' to Twitter.', __FILE__);
-            }
-        }
-    }
-
     if (common_config('queue', 'enabled')) {
         // Do it later!
         return common_enqueue_notice($notice);
@@ -822,68 +804,6 @@ function common_broadcast_notice($notice, $remote=false)
     }
 }
 
-function common_twitter_broadcast($notice, $flink)
-{
-    global $config;
-    $success = true;
-    $fuser = $flink->getForeignUser();
-    $twitter_user = $fuser->nickname;
-    $twitter_password = $flink->credentials;
-    $uri = 'http://www.twitter.com/statuses/update.json';
-
-    // XXX: Hack to get around PHP cURL's use of @ being a a meta character
-    $statustxt = preg_replace('/^@/', ' @', $notice->content);
-
-    $options = array(
-                     CURLOPT_USERPWD         => "$twitter_user:$twitter_password",
-                     CURLOPT_POST            => true,
-                     CURLOPT_POSTFIELDS        => array(
-                                                        'status'    => $statustxt,
-                                                        'source'    => $config['integration']['source']
-                                                        ),
-                     CURLOPT_RETURNTRANSFER    => true,
-                     CURLOPT_FAILONERROR        => true,
-                     CURLOPT_HEADER            => false,
-                     CURLOPT_FOLLOWLOCATION    => true,
-                     CURLOPT_USERAGENT        => "Laconica",
-                     CURLOPT_CONNECTTIMEOUT    => 120,  // XXX: Scary!!!! How long should this be?
-                     CURLOPT_TIMEOUT            => 120,
-
-                     # Twitter is strict about accepting invalid "Expect" headers
-                     CURLOPT_HTTPHEADER => array('Expect:')
-                     );
-
-    $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 $success;
-}
-
 // Stick the notice on the queue
 
 function common_enqueue_notice($notice)
@@ -935,6 +855,13 @@ function common_real_broadcast($notice, $remote=false)
             common_log(LOG_ERR, 'Error in public broadcast for notice ' . $notice->id);
         }
     }
+    if ($success) {
+        $success = broadcast_twitter($notice);
+        if (!$success) {
+            common_log(LOG_ERR, 'Error in Twitter broadcast for notice ' . $notice->id);
+        }
+    }
+    
     // XXX: broadcast notices to other IM
     return $success;
 }