rendered paste body<?php// $Id: twitter.module,v 1.1 2007/01/23 17:05:50 walkah Exp $/** * Twitter data is stored (internal to this module, at least) as structured arrays * in the following formats: * * $twitter_status = array( * 'twitter_id' => $unique_id_from_twitter, * 'twitter_uid' => $unique_user_id_from_twitter, * 'twitter_user' => $optional_sub_array * 'created_at' => $time_of_post_in_UTC, * 'created_time' => $unix_timestamp_of_post, * 'text' => $text_of_tweet, * 'source' => $source_application, * ); * * $twitter_account = array( * 'twitter_uid' => $unique_user_id_from_twitter, * 'name' => $twitter_login_email, * 'screen_name' => $twitter_screen_name, * 'description' => $user_description, * 'profile_image_url' => $image_url, * 'url' => $user_home_page, * 'protected' => $boolean, * 'status' => $optional_sub_array * ); */function twitter_fetch_user_timeline($screen_name, $filter_since = FALSE, $cache = TRUE) { if ($filter_since) { $sql = "SELECT t.created_at FROM {twitter} t LEFT JOIN {twitter_account} ta ON "; $sql .= "t.twitter_uid = ta.twitter_uid WHERE ta.screen_name = '%s'"; $sql .= "ORDER BY t.created_at DESC"; $since = db_result(db_query($sql, $screen_name)); } $url = "http://twitter.com/statuses/user_timeline/$screen_name.xml"; if (!empty($since)) { $url .= '?since='. urlencode($since); } $results = drupal_http_request($url, array(), 'GET'); $results = _twitter_convert_xml_to_array($results->data); if ($cache) { foreach($results as $status) { twitter_cache_status($status); } } return $results;}function twitter_fetch_user_friends($screen_name, $cache = TRUE) { $url = "http://twitter.com/statuses/friends/$screen_name.xml"; $results = drupal_http_request($url, array(), 'GET'); return _twitter_convert_xml_to_array($results->data);}function twitter_fetch_user_followers($screen_name, $password, $cache = TRUE) { $url = "http://twitter.com/statuses/followers/$screen_name.xml"; $headers = array('Authorization' => 'Basic '. base64_encode($screen_name .':'. $password), 'Content-type' => 'application/x-www-form-urlencoded'); $results = drupal_http_request($url, $headers, 'GET'); $results = _twitter_convert_xml_to_array($results->data); if ($cache) { foreach($results as $status) { twitter_cache_status($status); } } return $results;}function twitter_fetch_status($screen_name, $cache = TRUE) { $url = "http://twitter.com/statuses/$screen_name.xml"; $results = drupal_http_request($url, array(), 'GET'); $results = _twitter_convert_xml_to_array($results->data); if ($cache && !empty($results)) { foreach($results as $status) { twitter_cache_status($status); return $status; } }}function twitter_authenticate($screen_name, $password) { $url = "http://twitter.com/account/verify_credentials.xml"; $headers = array('Authorization' => 'Basic '. base64_encode($screen_name .':'. $password), 'Content-type' => 'application/x-www-form-urlencoded'); $results = drupal_http_request($url, $headers, 'GET'); drupal_http_request('http://twitter.com/account/end_session', $headers, $get); return ($results->code == '200');}function twitter_fetch_user_details($screen_name, $password, $cache = TRUE) { $url = "http://twitter.com/users/show/$screen_name.xml"; $headers = array('Authorization' => 'Basic '. base64_encode($screen_name .':'. $password), 'Content-type' => 'application/x-www-form-urlencoded'); $results = drupal_http_request($url, $headers, 'GET'); $results = _twitter_convert_xml_to_array($results->data); if ($cache) { foreach($results as $user) { twitter_cache_user($status); } } return $results;}function twitter_cache_status($status = array(), $silent = FALSE) { db_query("DELETE FROM {twitter} t WHERE t.twitter_id = %d", $status['twitter_id']); $sql = "INSERT INTO {twitter} t (twitter_id, screen_name, created_at, created_time, `text`, source) "; $sql .= "VALUES (%d, %d, '%s', %d, '%s', '%s')"; db_query($sql, $status['twitter_id'], $status['screen_name'], $status['created_at'], $status['created_time'], $status['text'], $status['source']); if (!$silent) { module_invoke_all('twitter_status_update', $status); }}function twitter_cache_user($twitter_user = array()) { db_query("DELETE FROM {twitter_account} ta WHERE ta.twitter_uid = %d", $twitter_user['twitter_uid']); $sql = "INSERT INTO {twitter_account} ta (twitter_uid, name, screen_name, description, profile_image_url, url, protected) "; $sql .= "VALUES (%d, '%s', '%s', '%s', '%s', '%s', %d)";}function twitter_set_status($screen_name, $password, $text = '', $source = NULL) { $url = "http://twitter.com/statuses/update.xml"; $headers = array('Authorization' => 'Basic '. base64_encode($screen_name .':'. $password), 'Content-type' => 'application/x-www-form-urlencoded'); $data = 'status='. urlencode($text); if (!empty($source)) { $data .= 'source='. urlencode($source); } return drupal_http_request($url, $headers, 'POST', $data);}/** * Internal XML munging code */function _twitter_convert_xml_to_array($data) { $results = array(); $xml = new SimpleXMLElement($data); if (!empty($xml->user)) { foreach($xml->user as $user) { $results[] = _twitter_convert_user($user); } } elseif (!empty($xml->status)) { foreach($xml->status as $status) { $results[] = _twitter_convert_status($status); } } return $results;}function _twitter_convert_status($status) { $result = (array)$status; $result['twitter_id'] = $result['id']; if (!empty($result['user']) && is_object($result['user'])) { $result['account'] = _twitter_convert_user($result['user']); $result['screen_name'] = $result['user']['screen_name']; } else { $result['screen_name'] = NULL; } $result['created_time'] = strtotime($result['created_at']); return $result;}function _twitter_convert_user($user) { $result = (array)$user; $result['twitter_uid'] = $result['id']; if (!empty($result['status']) && is_object($result['status'])) { $result['status'] = _twitter_convert_status($result['status']); } else { $result['twitter_uid'] = NULL; } return $result;}