You are here

function twitter_cron in Twitter 6.5

Same name and namespace in other branches
  1. 6.2 twitter.module \twitter_cron()
  2. 6.3 twitter.module \twitter_cron()
  3. 6.4 twitter.module \twitter_cron()
  4. 7.6 twitter.module \twitter_cron()
  5. 7.3 twitter.module \twitter_cron()
  6. 7.4 twitter.module \twitter_cron()
  7. 7.5 twitter.module \twitter_cron()

Implements hook_cron().

Imports new Twitter statuses for site users, and deletes expired tweets.

File

./twitter.module, line 163
Provides API integration with the Twitter microblogging service.

Code

function twitter_cron() {
  if (!variable_get('twitter_import', TRUE)) {
    watchdog('twitter', 'The Twitter module is configured to not download tweets right now.');
    return;
  }
  module_load_include('inc', 'twitter');

  // Verify that there's at least one authenticated account that can be used to
  // do API calls.
  $twitter = twitter_connect(NULL, TRUE, TRUE);
  if (empty($twitter)) {
    watchdog('twitter', 'Unable to find an authenticated account to do API calls from.');
    return FALSE;
  }
  watchdog('twitter', 'Starting to download tweets.');

  // Pull up a list of Twitter accounts that are flagged for updating, sorted
  // by how long it's been since we last updated them. This ensures that the
  // most out-of-date accounts get updated first.
  module_load_include('inc', 'twitter');
  $result = db_query_range("SELECT twitter_uid\n    FROM {twitter_account}\n    WHERE uid > 0 AND import = 1\n    ORDER BY last_refresh ASC", 0, 20);
  try {
    while ($twitter_account = db_fetch_object($result)) {
      $twitter_account = twitter_account_load($twitter_account->twitter_uid);

      // Fetch tweets for this account.
      twitter_fetch_user_timeline($twitter_account->id);

      // Optionally fetch mentions.
      if ($twitter_account
        ->is_auth() && $twitter_account->mentions) {
        twitter_fetch_mentions_timeline($twitter_account->id);
      }

      // Mark the time this account was updated.
      db_query("UPDATE {twitter_account} SET last_refresh = %d WHERE twitter_uid=%d", $_SERVER['REQUEST_TIME'], $twitter_account->id);
    }
  } catch (TwitterException $e) {

    // The exception has already been logged so we do not need to do anything
    // here apart from catching it.
    watchdog('twitter', 'There was a problem loading tweets during cron.');
  }

  // Nuke old statuses.
  if ($age = variable_get('twitter_expire', 0)) {
    db_query('DELETE FROM {twitter} WHERE created_time < %d', time() - $age);
  }
  watchdog('twitter', 'Finished downloading tweets.');
}