/** * Find all the Twitter foreign links for users who have requested * automatically subscribing to their Twitter friends locally. * * @return array flinks an array of Foreign_link objects */ function getObjects() { $flinks = array(); $flink = new Foreign_link(); $conn =& $flink->getDatabaseConnection(); $flink->service = TWITTER_SERVICE; $flink->orderBy('last_friendsync'); $flink->limit(25); // sync this many users during this run $flink->find(); while ($flink->fetch()) { if (($flink->friendsync & FOREIGN_FRIEND_RECV) == FOREIGN_FRIEND_RECV) { $flinks[] = clone $flink; } } $conn->disconnect(); global $_DB_DATAOBJECT; unset($_DB_DATAOBJECT['CONNECTIONS']); return $flinks; }
{ $msg = prepMessage($flink, $data); print json_encode($msg) . "\r\n"; } function prepMessage($flink, $data) { $msg->for_user = $flink->foreign_id; $msg->message = $data; return $msg; } if (have_option('all')) { $users = array(); $flink = new Foreign_link(); $flink->service = TWITTER_SERVICE; $flink->find(); while ($flink->fetch()) { if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) { $users[] = $flink->user_id; } } } else { $user = User::getKV('nickname', $nickname); $users = array($user->id); } $output = array(); foreach ($users as $id) { $user = User::getKV('id', $id); if (!$user) { throw new Exception("No user for id {$id}"); } $auth = twitterAuthForUser($user);
/** * Find all the Twitter foreign links for users who have requested * importing of their friends' timelines * * @return array flinks an array of Foreign_link objects */ function getObjects() { global $_DB_DATAOBJECT; $flink = new Foreign_link(); $conn =& $flink->getDatabaseConnection(); $flink->service = TWITTER_SERVICE; $flink->orderBy('last_noticesync'); $flink->find(); $flinks = array(); while ($flink->fetch()) { if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) { $flinks[] = clone $flink; common_log(LOG_INFO, "sync: foreign id {$flink->foreign_id}"); } else { common_log(LOG_INFO, "nothing to sync"); } } $flink->free(); unset($flink); $conn->disconnect(); unset($_DB_DATAOBJECT['CONNECTIONS']); return $flinks; }
function siteStreamForOwner(User $user) { // The user we auth as must be the owner of the application. $auth = twitterAuthForUser($user); if (have_option('apiroot')) { $stream = new TwitterSiteStream($auth, get_option_value('apiroot')); } else { $stream = new TwitterSiteStream($auth); } // Pull Twitter user IDs for all users we want to pull data for $userIds = array(); $flink = new Foreign_link(); $flink->service = TWITTER_SERVICE; $flink->find(); while ($flink->fetch()) { if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) { $userIds[] = $flink->foreign_id; } } $stream->followUsers($userIds); return $stream; }
/** * Pull the site's active Twitter-importing users and start spawning * some data streams for them! * * @fixme check their last-id and check whether we'll need to do a manual pull. * @fixme abstract out the fetching so we can work over multiple sites. */ protected function initStreams() { common_log(LOG_INFO, 'init...'); // Pull Twitter user IDs for all users we want to pull data for $flink = new Foreign_link(); $flink->service = TWITTER_SERVICE; // @fixme probably should do the bitfield check in a whereAdd but it's ugly :D $flink->find(); $userIds = array(); while ($flink->fetch()) { if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) { $userIds[] = $flink->foreign_id; if (count($userIds) >= self::USERS_PER_STREAM) { $this->spawnStream($userIds); $userIds = array(); } } } if (count($userIds)) { $this->spawnStream($userIds); } }
/** * Refresh the foreign links for this user * * @return void */ function refreshFlinks() { $flink = new Foreign_link(); $flink->service = 1; // Twitter $flink->orderBy('last_noticesync'); $cnt = $flink->find(); if (defined('SCRIPT_DEBUG')) { common_debug('Updating Twitter friends subscriptions' . " for {$cnt} users."); } $flinks = array(); while ($flink->fetch()) { if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) { $flinks[] = clone $flink; } } $flink->free(); unset($flink); return $flinks; }