-<?php\r
-/*\r
- * Abraham Williams (abraham@abrah.am) http://abrah.am\r
- *\r
- * Basic lib to work with Twitter's OAuth beta. This is untested and should not\r
- * be used in production code. Twitter's beta could change at anytime.\r
- *\r
- * Code based on:\r
- * Fire Eagle code - http://github.com/myelin/fireeagle-php-lib\r
- * twitterlibphp - http://github.com/jdp/twitterlibphp\r
- */\r
-\r
-//require_once('config.php');\r
-//require_once('oauth_lib.php');\r
-\r
-/**\r
- * Twitter OAuth class\r
- */\r
-class TwitterOAuth {\r
- /* Contains the last HTTP status code returned */\r
- public $http_code;\r
- /* Contains the last API call */\r
- public $last_api_call;\r
- /* Set up the API root URL */\r
- //public $host = "https://api.twitter.com/1/";\r
- public $host = API_URL;\r
- /* Set timeout default */\r
- public $timeout = 5;\r
- /* Set connect timeout */\r
- public $connecttimeout = 30;\r
- /* Verify SSL Cert */\r
- public $ssl_verifypeer = FALSE;\r
- /* Response type */\r
- public $type = 'json';\r
- /* Decode return json data */\r
- public $decode_json = TRUE;\r
-\r
- public $source = 'embr';\r
-\r
- // user info\r
- public $username;\r
- public $screen_name;\r
- public $user_id;\r
- \r
- //for debug use\r
- public $curl_info;\r
- public $http_header;\r
-\r
- /**\r
- * Set API URLS\r
- */\r
- function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; }\r
- function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }\r
- function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; }\r
- function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }\r
-\r
- /**\r
- * Debug helpers\r
- */\r
- function lastStatusCode() { return $this->http_status; }\r
- function lastAPICall() { return $this->last_api_call; }\r
-\r
- /**\r
- * construct TwitterOAuth object\r
- */\r
- function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {\r
- $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();\r
- $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);\r
- if (!empty($oauth_token) && !empty($oauth_token_secret)) {\r
- $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);\r
- $this->screen_name = $_SESSION['access_token']['screen_name'];\r
- $this->username = $_SESSION['access_token']['screen_name'];\r
- $this->user_id = $_SESSION['access_token']['user_id'];\r
- } else {\r
- $this->token = NULL;\r
- }\r
- }\r
-\r
-\r
- /**\r
- * Get a request_token from Twitter\r
- *\r
- * @returns a key/value array containing oauth_token and oauth_token_secret\r
- */\r
- function getRequestToken($oauth_callback = NULL) {\r
- $parameters = array();\r
- if (!empty($oauth_callback)) {\r
- $parameters['oauth_callback'] = $oauth_callback;\r
- } \r
- $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);\r
- $token = OAuthUtil::parse_parameters($request);\r
- $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);\r
- return $token;\r
- }\r
-\r
- /**\r
- * Get the authorize URL\r
- *\r
- * @returns a string\r
- */\r
- function getAuthorizeURL($token) {\r
- if (is_array($token)) {\r
- $token = $token['oauth_token'];\r
- }\r
- return $this->authorizeURL() . "?oauth_token={$token}";\r
- }\r
-\r
- /**\r
- * Exchange the request token and secret for an access token and\r
- * secret, to sign API calls.\r
- *\r
- * @returns array("oauth_token" => the access token,\r
- * "oauth_token_secret" => the access secret)\r
- */\r
- function getAccessToken($oauth_verifier = FALSE) {\r
- $parameters = array();\r
- if (!empty($oauth_verifier)) {\r
- $parameters['oauth_verifier'] = $oauth_verifier;\r
- }\r
- $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);\r
- $token = OAuthUtil::parse_parameters($request);\r
- $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);\r
- return $token;\r
- }\r
-\r
- /**\r
- * GET wrappwer for oAuthRequest.\r
- */\r
- function get($url, $parameters = array()) {\r
- $response = $this->oAuthRequest($url, 'GET', $parameters);\r
- if($response == false){\r
- return false;\r
- }\r
- if ($this->type == 'json' && $this->decode_json) {\r
- return json_decode($response);\r
- }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
- return simplexml_load_string($response);\r
- }\r
- return $response;\r
- }\r
-\r
- /**\r
- * POST wreapper for oAuthRequest.\r
- */\r
- function post($url, $parameters = array(), $multipart = NULL) {\r
- $response = $this->oAuthRequest($url, 'POST', $parameters, $multipart);\r
- if($response === false){\r
- return false;\r
- }\r
- if ($this->type === 'json' && $this->decode_json) {\r
- return json_decode($response);\r
- }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
- return simplexml_load_string($response);\r
- }\r
- return $response;\r
- }\r
-\r
- /**\r
- * DELTE wrapper for oAuthReqeust.\r
- */\r
- function delete($url, $parameters = array()) {\r
- $response = $this->oAuthRequest($url, 'DELETE', $parameters);\r
- if($response === false){\r
- return false;\r
- }\r
- if ($this->type === 'json' && $this->decode_json) {\r
- return json_decode($response);\r
- }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
- return simplexml_load_string($response);\r
- }\r
- return $response;\r
- }\r
-\r
- /**\r
- * Format and sign an OAuth / API request, then make an HTTP request\r
- */\r
- function oAuthRequest($url, $method, $parameters, $multipart=NULL) {\r
- if ($url[0] == '/') { //non-twitter.com api shall offer the entire url.\r
- $url = "{$this->host}{$url}.{$this->type}";\r
- }\r
- $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);\r
- $request->sign_request($this->sha1_method, $this->consumer, $this->token);\r
- $request->set_http_header($multipart);\r
- \r
- $ci = curl_init();\r
- /* Curl settings */\r
- curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);\r
- curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);\r
- curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);\r
- curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);\r
-\r
- switch ($method) {\r
- case 'GET':\r
- curl_setopt($ci, CURLOPT_URL, $request->to_url());\r
- curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));\r
- break;\r
- case 'POST':\r
- $postfields = $multipart ? $multipart : $request->to_postdata();\r
- curl_setopt($ci, CURLOPT_URL, $request->get_normalized_http_url());\r
- curl_setopt($ci, CURLOPT_HTTPHEADER, $request->http_header);\r
- curl_setopt($ci, CURLOPT_POST, TRUE);\r
- if (!empty($postfields)) {\r
- curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);\r
- }\r
- break;\r
- case 'DELETE':\r
- $postfields = $request->to_postdata($multipart);\r
- $url = $request->get_normalized_http_url();\r
- curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');\r
- curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));\r
- if (!empty($postfields)) {\r
- $url = "{$url}?{$postfields}";\r
- curl_setopt($ci, CURLOPT_URL, $url);\r
- }\r
- }\r
-\r
- $response = curl_exec($ci);\r
- $this->http_header = $request->http_header;\r
- $this->curl_info = curl_getinfo($ci);\r
- $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);\r
- $this->last_api_call = curl_getinfo($ci, CURLINFO_EFFECTIVE_URL);\r
- \r
- curl_close ($ci);\r
- \r
- return $response;\r
- }\r
- \r
-\r
- /* ---------- API METHODS ---------- */\r
- /* */\r
- /* ---------- Block ---------- */\r
- function blockingIDs(){\r
- $url = '/blocks/blocking/ids';\r
- return $this->get($url);\r
- }\r
-\r
- function blockingList($id, $cursor=-1, $skip_status = 1){\r
- $url = '/blocks/list';\r
- $args = array();\r
- if($id)\r
- $args['user_id'] = $id;\r
- if($cursor)\r
- $args['cursor'] = $cursor;\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function blockUser($id){\r
- $url = "/blocks/create/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function isBlocked($id){\r
- $url = "/blocks/exists/$id";\r
- return $this->get($url);\r
- }\r
-\r
- function unblockUser($id){\r
- $url = "/blocks/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- /* ---------- Messages ---------- */\r
- function deleteDirectMessage($id){\r
- $url = "/direct_messages/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- function directMessages($page = false, $since_id = false, $count = null, $include_entities = true){\r
- $url = '/direct_messages';\r
- $args = array();\r
- if( $since_id )\r
- $args['since_id'] = $since_id;\r
- if( $page )\r
- $args['page'] = $page;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function sendDirectMessage($user, $text){\r
- $url = '/direct_messages/new';\r
- $args = array();\r
- $args['user'] = $user;\r
- if($text)\r
- $args['text'] = $text;\r
- return $this->post($url, $args);\r
- }\r
-\r
- function sentDirectMessage($page = false, $since = false, $since_id = false){\r
- $url = '/direct_messages/sent';\r
- $args = array();\r
- if($since)\r
- $args['since'] = $since;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($page)\r
- $args['page'] = $page;\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- List ---------- */\r
- function addListMember($listid, $memberid){\r
- $url = "/lists/members/create_all";\r
- $args = array();\r
- if($listid) \r
- $args['slug'] = $listid;\r
- if($memberid)\r
- $args['user_id'] = $memberid;\r
- \r
- return $this->post($url, $args);\r
- }\r
-\r
- function beAddedLists($owner_screen_name = '', $cursor = false){\r
- $url = "/lists/memberships";\r
- $args = array();\r
- if($owner_screen_name)\r
- $args['owner_screen_name'] = $owner_screen_name;\r
- if($cursor){\r
- $args['cursor'] = $cursor;\r
- }\r
- return $this->get($url, $args);\r
- }\r
-\r
- function createList($name, $description, $isPortect){\r
- $url = "/lists/create";\r
- $args = array();\r
- if($name)\r
- $args['name'] = $name;\r
- if($description)\r
- $args['description'] = $description;\r
- if($isProtect)\r
- $args['mode'] = 'private';\r
- \r
- return $this->post($url, $args);\r
- }\r
-\r
- function createdLists($username = '', $cursor = false){\r
- $url = "/lists/ownerships";\r
- $args = array();\r
- if($cursor)\r
- $args['cursor'] = $cursor;\r
- \r
- return $this->get($url, $args);\r
- }\r
-\r
- function deleteList($id){\r
- $url = "/lists/destroy";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->post($url, $args);\r
- }\r
-\r
- function deleteListMember($id, $memberid){\r
- $arr = explode("/", $id);\r
- $url = "/lists/members/destroy_all";\r
- $args = array();\r
- $args['slug'] = $arr[1];\r
- if($memberid)\r
- $args['id'] = $memberid;\r
- \r
- return $this->post($url, $args);\r
- }\r
-\r
- function editList($prename, $name, $description, $isProtect){\r
- $url = "/lists/update";\r
- $args = array();\r
- if($prename)\r
- $args['slug'] = $prename;\r
- if($name)\r
- $args['name'] = $name;\r
- if($description)\r
- $args['description'] = $description;\r
- if($isProtect)\r
- $args['mode'] = "private";\r
- return $this->post($url, $args);\r
- }\r
-\r
- function followedLists($username = '', $cursor = false){\r
- $url = "/lists/subscriptions";\r
- $args = array();\r
- if($username) \r
- $args['user_id'] = $username;\r
- if($cursor)\r
- $args['cursor'] = $cursor;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function followList($id){\r
- $url = "/lists/subscribers/create";\r
- $arr = explode("/", $id);\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->post($url, $args);\r
- }\r
-\r
- function isFollowedList($id){\r
- $url = "/lists/subscribers/show";\r
- $arr = explode('/', $id);\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- $args['user_id'] = $this->username;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function listFollowers($id, $cursor = false, $skip_status = 1){\r
- $url = "/lists/subscribers";\r
- $arr = explode('/', $id);\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- if($cursor){\r
- $args['cursor'] = $cursor;\r
- }\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function listInfo($id){\r
- $arr = explode('/', $id);\r
- $url = "/lists/show";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->get($url, $args);\r
- }\r
-\r
- function listMembers($id, $cursor = false, $skip_status = 1){\r
- $arr = explode("/", $id);\r
- $url = "/lists/members";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- if($cursor){\r
- $args['cursor'] = $cursor;\r
- }\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
-\r
- }\r
-\r
- function listStatus($id, $page = false, $since_id = false,$include_rts = true, $include_entities = true){\r
- $arr = explode('/', $id);\r
- $url = '/lists/statuses';\r
- $args = array();\r
- $args['slug'] = $arr[1];\r
- $args['owner_screen_name'] = $arr[0];\r
- if($page){\r
- $args['page'] = $page;\r
- }\r
- if($since_id){\r
- $args['since_id'] = $since_id;\r
- }\r
- if($include_rts)\r
- $args['include_rts'] = $include_rts;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function unfollowList($id){\r
- $arr = explode("/", $id);\r
- $url = "/lists/subscribers/destroy";\r
- $args = array();\r
- $args['owner_screen_name'] = $arr[0];\r
- $args['slug'] = $arr[1];\r
- return $this->post($url, $args);\r
- }\r
-\r
- /* ---------- Friendship ---------- */\r
- function destroyUser($id){\r
- $url = "/friendships/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- function followers($id = false, $page = false, $skip_status = true){\r
- $url = 'followers/list';\r
- if( $id )\r
- $args['user_id'] = $id;\r
- $args['cursor'] = $page ? $page : -1;\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function followUser($id, $notifications = false){\r
- $url = "/friendships/create/$id";\r
- $args = array();\r
- if($notifications)\r
- $args['follow'] = true;\r
- return $this->post($url, $args);\r
- }\r
-\r
- function friends($id = false, $page = false, $skip_status = true){\r
- $url = '/friends/list';\r
- $args = array();\r
- if( $id )\r
- $args['user_id'] = $id;\r
- $args['cursor'] = $page ? $page : -1;\r
- $args['skip_status'] = $skip_status;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function isFriend($user_a, $user_b){\r
- $url = '/friendships/exists';\r
- $args = array();\r
- $args['user_a'] = $user_a;\r
- $args['user_b'] = $user_b;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function friendship($source_screen_name,$target_screen_name){\r
- $url = '/friendships/show';\r
- $args = array();\r
- $args['source_screen_name'] = $source_screen_name;\r
- $args['target_screen_name'] = $target_screen_name;\r
- return $this->get($url, $args);\r
- }\r
- \r
- function relationship($target, $source = false){\r
- $url = '/friendships/show';\r
- $args = array();\r
- $args['target_screen_name'] = $target;\r
- if($source){\r
- $args['source_screen_name'] = $source;\r
- }\r
- return $this->get($url, $args);\r
- }\r
-\r
- function showUser($id = false, $email = false, $user_id = false, $screen_name = false,$include_entities = true){\r
- $url = '/users/show';\r
- $args = array();\r
- if($id)\r
- $args['id'] = $id;\r
- elseif($screen_name)\r
- $args['id'] = $screen_name;\r
- else\r
- $args['id'] = $this->user_id;\r
-\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- Ratelimit ---------- */\r
- function ratelimit(){\r
- $url = '/account/rate_limit_status';\r
- return $this->get($url,array(),false);\r
- }\r
-\r
- /* ---------- Retweet ---------- */\r
- function getRetweeters($id, $count = false){\r
- $url = "/statuses/retweets/$id";\r
- if($count != false) {\r
- $url .= "?count=$count";\r
- }\r
- return $this->get($url);\r
- }\r
-\r
- function retweet($id){\r
- $url = "/statuses/retweet/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function retweets($id, $count = 20,$include_entities = true){\r
- if($count > 100){\r
- $count = 100;\r
- }\r
- $url = "/statuses/retweets/$id";\r
- $args = array();\r
- $args['count'] = unt;\r
- if($include_ities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url,$args);\r
- }\r
-\r
- function retweets_of_me($page = false, $count = false, $since_id = false, $max_id = false,$include_entities = true){\r
- $url = '/statuses/retweets_of_me';\r
- $args = array();\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($max_id)\r
- $args['max_id'] = $max_id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($page)\r
- $args['page'] = $page;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- Search ---------- */\r
- function search($q = false, $max_id = false, $include_entities = true){\r
- $url = "/search/tweets";\r
- if(!$q) {\r
- return false;\r
- } else {\r
- $args = array();\r
- $args['q'] = $q;\r
- }\r
- if($max_id)\r
- $args['max_id'] = $max_id;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- /* ---------- Spam ---------- */\r
- function reportSpam($screen_name){\r
- $url = '/report_spam';\r
- $args = array();\r
- $args['screen_name'] = $screen_name;\r
- return $this->post($url, $args);\r
- }\r
-\r
- /* ---------- Timeline ---------- */\r
- function deleteStatus($id){\r
- $url = "/statuses/destroy/$id";\r
- return $this->delete($url);\r
- }\r
-\r
- function homeTimeline($page = false, $since_id = false, $count = false, $include_entities = true) {\r
- $url = '/statuses/home_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = $page;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
- \r
- function friendsTimeline($page = false, $since_id = false, $count = false,$include_entities = true){\r
- $url = '/statuses/friends_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = $page;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function getFavorites($page = false,$userid=false,$include_entities = true){\r
- $url = '/favorites/list';\r
- $args = array();\r
- if($userid)\r
- $args['user_id'] = $userid;\r
- if($page)\r
- $args['page'] = $page;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function makeFavorite($id){\r
- $url = "/favorites/create/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function publicTimeline($sinceid = false,$include_entities = true){\r
- $url = '/statuses/public_timeline';\r
- $args = array();\r
- if($sinceid){\r
- $args['since_id'] = $sinceid;\r
- }\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function removeFavorite($id){\r
- $url = "/favorites/destroy/$id";\r
- return $this->post($url);\r
- }\r
-\r
- function replies($page = false, $since_id = false,$include_entities = true){\r
- $url = '/statuses/mentions_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = (int) $page;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url, $args);\r
- }\r
-\r
- function showStatus($id,$include_entities = true){\r
- $url = "/statuses/show/";\r
- $args = array();\r
- if($id)\r
- $args['id'] = $id;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->get($url,$args);\r
- }\r
-\r
- function update($status, $replying_to = false,$include_entities = true){\r
- try{\r
- $url = '/statuses/update';\r
- $args = array();\r
- $args['status'] = $status;\r
- if($replying_to)\r
- $args['in_reply_to_status_id'] = $replying_to;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- return $this->post($url, $args);\r
- }catch(Exception $ex){\r
- echo $ex->getLine." : ".$ex->getMessage();\r
- }\r
- }\r
-\r
- function userTimeline($page = false, $id = false, $count = false, $since_id = false, $include_rts = true, $include_entities = true){\r
- $url = '/statuses/user_timeline';\r
- $args = array();\r
- if($page)\r
- $args['page'] = $page;\r
- if($id)\r
- $args['id'] = $id;\r
- if($count)\r
- $args['count'] = $count;\r
- if($since_id)\r
- $args['since_id'] = $since_id;\r
- if($include_rts)\r
- $args['include_rts'] = $include_rts;\r
- if($include_entities)\r
- $args['include_entities'] = $include_entities;\r
- $response = $this->get($url, $args);\r
- return $response;\r
- }\r
-\r
- function trends_closest($lat = false, $long=false) {\r
- $url = "/trends/closest";\r
- $args = array();\r
- if ($lat)\r
- $args['lat'] = $lat;\r
- if ($long)\r
- $args['long'] = $long;\r
- return $this->get($url, $args);\r
- }\r
- \r
- function trends_place($id = 1) {\r
- $url = "/trends/place";\r
- $args = array();\r
- if ($id)\r
- $args['id'] = $id;\r
- return $this->get($url, $args);\r
- }\r
- /* ---------- Misc. ---------- */\r
- function twitterAvailable(){\r
- $url = "/help/test";\r
- if($this->get($url) == 'ok'){\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
- function veverify($skip_status = false){\r
- $url = '/account/verify_credentials';\r
- $args = array('skip_status' => $skip_status);\r
- return $this->get($url,$args);\r
- }\r
- \r
- function updateProfile($fields = array(), $skip_status = true){\r
- $url = '/account/update_profile';\r
- $args = array();\r
- foreach( $fields as $pk => $pv ){\r
- switch( $pk ){\r
- case 'name' :\r
- $args[$pk] = (string) substr( $pv, 0, 20 );\r
- break;\r
- case 'url' :\r
- $args[$pk] = (string) substr( $pv, 0, 100 );\r
- break;\r
- case 'location' :\r
- $args[$pk] = (string) substr( $pv, 0, 30 );\r
- break;\r
- case 'description' :\r
- $args[$pk] = (string) substr( $pv, 0, 160 );\r
- break;\r
- default :\r
- break;\r
- }\r
- $args['skip_status'] = $skip_status;\r
- }\r
- return $this->post($url, $args);\r
- }\r
- \r
- /* media */\r
- function updateProfileImage($image, $skip_status=true) {\r
- $url = '/account/update_profile_image';\r
- $mul = array();\r
- if($image){\r
- $mul['image']=$image;\r
- }\r
- if($skip_status) {\r
- $args['skip_status']=$skip_status;\r
- }\r
- return $this->post($url, $args, $mul);\r
- }\r
- \r
- function updateProfileBackground($image, $skip_status=true) {\r
- $url = '/account/update_profile_background_image';\r
- $mul = array();\r
- if($image){\r
- $mul['image']=$image;\r
- $mul['skip_status']=$skip_status;\r
- }\r
- return $this->post($url, NULL, $mul);\r
- }\r
- \r
- function updateMedia($status,$image,$replying_to = false) {\r
- $url = 'https://upload.twitter.com/1/statuses/update_with_media'.$this->type;\r
- $args = array();\r
- if($status) $args['status'] = $status;\r
- if($replying_to) $args['in_reply_to_status_id'] = $replying_to;\r
- $mul = array();\r
- if($image) $mul['media'][] = $image;\r
- return $this->post($url,$args,$mul);\r
- }\r
-}\r
-\r
+<?php
+/*
+ * Abraham Williams (abraham@abrah.am) http://abrah.am
+ *
+ * Basic lib to work with Twitter's OAuth beta. This is untested and should not
+ * be used in production code. Twitter's beta could change at anytime.
+ *
+ * Code based on:
+ * Fire Eagle code - http://github.com/myelin/fireeagle-php-lib
+ * twitterlibphp - http://github.com/jdp/twitterlibphp
+ */
+
+//require_once('config.php');
+//require_once('oauth_lib.php');
+
+/**
+ * Twitter OAuth class
+ */
+class TwitterOAuth {
+ /* Contains the last HTTP status code returned */
+ public $http_code;
+ /* Contains the last API call */
+ public $last_api_call;
+ /* Set up the API root URL */
+ public $host = API_URL;
+ /* Set timeout default */
+ public $timeout = 5;
+ /* Set connect timeout */
+ public $connecttimeout = 30;
+ /* Verify SSL Cert */
+ public $ssl_verifypeer = FALSE;
+
+ public $source = 'embr';
+
+ // user info
+ public $username;
+ public $screen_name;
+ public $user_id;
+
+ //for debug use
+ public $curl_info;
+ public $http_header;
+
+ /**
+ * Set API URLS
+ */
+ function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; }
+ function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
+ function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; }
+ function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }
+
+ /**
+ * Debug helpers
+ */
+ function lastStatusCode() { return $this->http_status; }
+ function lastAPICall() { return $this->last_api_call; }
+
+ /**
+ * construct TwitterOAuth object
+ */
+ function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
+ $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
+ $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
+ if (!empty($oauth_token) && !empty($oauth_token_secret)) {
+ $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
+ $this->screen_name = $_SESSION['access_token']['screen_name'];
+ $this->username = $_SESSION['access_token']['screen_name'];
+ $this->user_id = $_SESSION['access_token']['user_id'];
+ } else {
+ $this->token = NULL;
+ }
+ }
+
+
+ /**
+ * Get a request_token from Twitter
+ *
+ * @returns a key/value array containing oauth_token and oauth_token_secret
+ */
+ function getRequestToken($oauth_callback = NULL) {
+ $parameters = array();
+ if (!empty($oauth_callback)) {
+ $parameters['oauth_callback'] = $oauth_callback;
+ }
+ $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
+ $token = OAuthUtil::parse_parameters($request);
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+ return $token;
+ }
+
+ /**
+ * Get the authorize URL
+ *
+ * @returns a string
+ */
+ function getAuthorizeURL($token) {
+ if (is_array($token)) {
+ $token = $token['oauth_token'];
+ }
+ return $this->authorizeURL() . "?oauth_token={$token}";
+ }
+
+ /**
+ * Exchange the request token and secret for an access token and
+ * secret, to sign API calls.
+ *
+ * @returns array("oauth_token" => the access token,
+ * "oauth_token_secret" => the access secret)
+ */
+ function getAccessToken($oauth_verifier = FALSE) {
+ $parameters = array();
+ if (!empty($oauth_verifier)) {
+ $parameters['oauth_verifier'] = $oauth_verifier;
+ }
+ $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
+ $token = OAuthUtil::parse_parameters($request);
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+ return $token;
+ }
+
+ /**
+ * GET wrappwer for oAuthRequest.
+ */
+ function get($url, $parameters = array()) {
+ $response = $this->oAuthRequest($url, 'GET', $parameters);
+ if($response == false){
+ return false;
+ }
+ return json_decode($response);
+ }
+
+ /**
+ * POST wreapper for oAuthRequest.
+ */
+ function post($url, $parameters = array(), $multipart = NULL) {
+ $response = $this->oAuthRequest($url, 'POST', $parameters, $multipart);
+ if($response === false){
+ return false;
+ }
+ return json_decode($response);
+ }
+
+ /**
+ * Format and sign an OAuth / API request, then make an HTTP request
+ */
+ function oAuthRequest($url, $method, $parameters, $multipart=NULL) {
+ if ($url[0] == '/') { //non-twitter.com api shall offer the entire url.
+ $url = "{$this->host}{$url}.json";
+ }
+ $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
+ $request->sign_request($this->sha1_method, $this->consumer, $this->token);
+ $request->set_http_header($multipart);
+
+ $ci = curl_init();
+ /* Curl settings */
+ curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
+ curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
+ curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
+ curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
+
+ switch ($method) {
+ case 'GET':
+ curl_setopt($ci, CURLOPT_URL, $request->to_url());
+ curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
+ break;
+ case 'POST':
+ $postfields = $multipart ? $multipart : $request->to_postdata();
+ curl_setopt($ci, CURLOPT_URL, $request->get_normalized_http_url());
+ curl_setopt($ci, CURLOPT_HTTPHEADER, $request->http_header);
+ curl_setopt($ci, CURLOPT_POST, TRUE);
+ if (!empty($postfields)) {
+ curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
+ }
+ }
+
+ $response = curl_exec($ci);
+ $this->http_header = $request->http_header;
+ $this->curl_info = curl_getinfo($ci);
+ $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
+ $this->last_api_call = curl_getinfo($ci, CURLINFO_EFFECTIVE_URL);
+
+ curl_close ($ci);
+
+ return $response;
+ }
+
+
+ /* ---------- API METHODS ---------- */
+ /* */
+ /* ---------- Block ---------- */
+ function blockingList($id, $cursor=-1, $skip_status = true){
+ $url = '/blocks/list';
+ $args = array();
+ if($id)
+ $args['screen_name'] = $id;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function blockUser($id){
+ $url = "/blocks/create";
+ $args = array();
+ $args['screen_name'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function unblockUser($id){
+ $url = "/blocks/destroy";
+ $args = array();
+ $args['screen_name'] = $id;
+ return $this->post($url, $args);
+ }
+
+ /* ---------- Messages ---------- */
+ function deleteDirectMessage($id){
+ $url = "/direct_messages/destroy";
+ $args = array();
+ $args['id'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function directMessages($since_id = false, $max_id = false, $count = false, $include_entities = true){
+ $url = '/direct_messages';
+ $args = array();
+ if( $since_id )
+ $args['since_id'] = $since_id;
+ if( $max_id )
+ $args['max_id'] = $max_id;
+ if( $count )
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function sentDirectMessages($since_id = false, $max_id = false, $count = false, $include_entities = true){
+ $url = '/direct_messages/sent';
+ $args = array();
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if( $max_id )
+ $args['max_id'] = $max_id;
+ if( $count )
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- List ---------- */
+ function addListMember($listid, $id, $memberid){
+ $url = "/lists/members/create_all";
+ $args = array();
+ if($listid)
+ $args['slug'] = $listid;
+ if($id)
+ $args['owner_screen_name'] = $id;
+ if($memberid){
+ $args['screen_name'] = $memberid;
+ }
+ return $this->post($url, $args);
+ }
+
+ function beAddedLists($username = '', $cursor = false){
+ $url = "/lists/memberships";
+ $args = array();
+ if($username)
+ $args['screen_name'] = $username;
+ if($cursor){
+ $args['cursor'] = $cursor;
+ }
+ return $this->get($url, $args);
+ }
+
+ function createList($name, $description, $isPortect){
+ $url = "/lists/create";
+ $args = array();
+ if($name)
+ $args['name'] = $name;
+ if($description)
+ $args['description'] = $description;
+ if($isProtect)
+ $args['mode'] = 'private';
+
+ return $this->post($url, $args);
+ }
+
+ function myLists($username = false, $user_id = false, $count = false){
+ $url = "/lists/ownerships";
+ $args = array();
+ if($username){
+ $args['screen_name'] = $username;
+ } else {
+ $args['screen_name'] = $this->username;
+ }
+
+ return $this->get($url, $args);
+ }
+
+ function deleteList($slug){
+ $url = "/lists/destroy";
+ $args = array();
+ $args['slug'] = $slug;
+ $args['owner_screen_name'] = $this->username;
+ return $this->post($url, $args);
+ }
+
+ function deleteListMember($slug, $owner, $memberid){
+ $url = "/lists/members/destroy_all";
+ $args = array();
+ $args['slug'] = $slug;
+ $args['owner_screen_name'] = $owner;
+ $args['user_id'] = $memberid;
+
+ return $this->post($url, $args);
+ }
+
+ function editList($prename, $name, $description, $isProtect){
+ $url = "/lists/update";
+ $args = array();
+ if($prename)
+ $args['slug'] = $prename;
+ if($name)
+ $args['name'] = $name;
+ if($description)
+ $args['description'] = $description;
+ if($isProtect)
+ $args['mode'] = "private";
+ return $this->post($url, $args);
+ }
+
+ function followedLists($username = '', $cursor = false){
+ $url = "/lists/subscriptions";
+ $args = array();
+ if($username)
+ $args['screen_name'] = $username;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ return $this->get($url, $args);
+ }
+
+ function followList($id){
+ $url = "/lists/subscribers/create";
+ $arr = explode("/", $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ return $this->post($url, $args);
+ }
+
+ function isFollowedList($id){
+ $url = "/lists/subscribers/show";
+ $arr = explode('/', $id);
+ $args = array();
+ $args['owner_screen_name'] = $arr[0];
+ $args['slug'] = $arr[1];
+ $args['screen_name'] = $this->username;
+ return isset($this->get($url, $args)->screen_name);
+ }
+
+ function listFollowers($id, $cursor = false, $skip_status = true){
+ $url = "/lists/subscribers";
+ $arr = explode('/', $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ if($cursor){
+ $args['cursor'] = $cursor;
+ }
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function listInfo($id){
+ $arr = explode('/', $id);
+ $url = "/lists/show";
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ return $this->get($url, $args);
+ }
+
+ function listMembers($id, $cursor = false, $skip_status = true){
+ $url = "/lists/members";
+ $arr = explode("/", $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ if($cursor){
+ $args['cursor'] = $cursor;
+ }
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+
+ }
+
+ function listStatus($id, $since_id = false, $max_id = false, $include_rts = true, $include_entities = true){
+ $arr = explode('/', $id);
+ $url = "/lists/statuses";
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($include_rts)
+ $args['include_rts'] = $include_rts;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function unfollowList($id){
+ $url = "/lists/subscribers/destroy";
+ $arr = explode("/", $id);
+ $args = array();
+ $args['slug'] = $arr[1];
+ $args['owner_screen_name'] = $arr[0];
+ return $this->post($url, $args);
+ }
+
+ /* ---------- Friendship ---------- */
+ function destroyUser($id){
+ $url = "/friendships/destroy";
+ $args = array();
+ $args['screen_name'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function followers($id = false, $cursor = -1, $skip_status = true){ // GET statuses/friends is removed, try GET followers/list instead
+ $url = '/followers/list';
+ $args = array();
+ if( $id )
+ $args['screen_name'] = $id;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function followUser($id, $notifications = false){
+ $url = "/friendships/create";
+ $args = array();
+ $args['screen_name'] = $id;
+ if($notifications)
+ $args['follow'] = true;
+ return $this->post($url, $args);
+ }
+
+ function friends($id = false, $cursor = -1, $skip_status = true){ // GET statuses/friends is removed, try GET friends/list instead
+ $url = '/friends/list';
+ $args = array();
+ if( $id )
+ $args['screen_name'] = $id;
+ if($cursor)
+ $args['cursor'] = $cursor;
+ $args['skip_status'] = $skip_status;
+ return $this->get($url, $args);
+ }
+
+ function relationship($target_screen_name, $source_screen_name = false){
+ $url = '/friendships/show';
+ $args = array();
+ $args['target_screen_name'] = $target_screen_name;
+ $args['source_screen_name'] = $source_screen_name ? $source_screen_name : $this->username;
+ return $this->get($url, $args);
+ }
+
+ function showUser($screen_name = false, $user_id = false, $include_entities = true){
+ $url = '/users/show';
+ $args = array();
+ if($screen_name)
+ $args['screen_name'] = $screen_name;
+ else
+ $args['user_id'] = $user_id ? $user_id : $this->user_id;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Ratelimit ---------- */
+ /* this API changed a lot due to the
+ * update of twitter's limit policy,
+ * get only status limits here by
+ * default */
+ function ratelimit($resources = "statuses"){
+ $url = '/application/rate_limit_status';
+ $args = array();
+ $args['resources'] = $resources;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Retweet ---------- */
+ function retweet($id){
+ $url = "/statuses/retweet/$id";
+ return $this->post($url);
+ }
+
+ function retweets($id, $count = 20){
+ if($count > 100){
+ $count = 100;
+ }
+ $url = "/statuses/retweets/$id";
+ $args = array();
+ $args['count'] = $count;
+ return $this->get($url,$args);
+ }
+
+ function retweets_of_me($count = false, $since_id = false, $max_id = false, $include_entities = true){
+ $url = '/statuses/retweets_of_me';
+ $args = array();
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($count)
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Search ---------- */
+ function savedSearches(){
+ $url = '/saved_searches/list';
+ return $this->get($url);
+ }
+
+ function deleteSavedSearch($ssid){
+ $url = "/saved_searches/destroy/{$ssid}";
+ return $this->post($url);
+ }
+
+ function saveSearch($query){
+ $url = "/saved_searches/create";
+ $args = array();
+ $args['query'] = $query;
+ return $this->post($url, $args);
+ }
+
+ function search($q = false, $since_id = false, $max_id = false, $include_entities = true){
+ $url = '/search/tweets';
+ if(!$q) {
+ return false;
+ } else {
+ $args = array();
+ $args['q'] = $q;
+ }
+ if($since_id){
+ $args['since_id'] = $since_id;
+ }
+ if($max_id){
+ $args['max_id'] = $max_id;
+ }
+ if($include_entities){
+ $args['include_entities'] = $include_entities;
+ }
+ return $this->get($url, $args);
+ }
+
+ /* ---------- Spam ---------- */
+ function reportSpam($screen_name){
+ $url = '/users/report_spam';
+ $args = array();
+ $args['screen_name'] = $screen_name;
+ return $this->post($url, $args);
+ }
+
+ /* ---------- Timeline ---------- */
+ function deleteStatus($id){
+ $url = "/statuses/destroy/$id";
+ return $this->post($url);
+ }
+
+ function homeTimeline($since_id = false, $max_id = false, $count = false, $include_entities = true) {
+ $url = '/statuses/home_timeline';
+ $args = array();
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($count)
+ $args['count'] = $count;
+ else
+ $args['count'] = 30;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function getFavorites($userid = false, $sinceid = false, $maxid = false, $count = false, $include_entities = true){
+ $url = '/favorites/list';
+ $args = array();
+ if($userid)
+ $args['screen_name'] = $userid;
+ if($sinceid)
+ $args['since_id'] = $sinceid;
+ if($maxid)
+ $args['max_id'] = $maxid;
+ if($count)
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function makeFavorite($id){
+ $url = "/favorites/create";
+ $args = array();
+ if($id)
+ $args['id'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function removeFavorite($id){
+ $url = "/favorites/destroy";
+ $args = array();
+ if($id)
+ $args['id'] = $id;
+ return $this->post($url, $args);
+ }
+
+ function replies($since_id = false, $max_id = false, $count = false, $include_entities = true){
+ $url = '/statuses/mentions_timeline';
+ $args = array();
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($count)
+ $args['count'] = $count;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url, $args);
+ }
+
+ function showStatus($id,$include_entities = true){
+ $url = "/statuses/show";
+ $args = array();
+ if($id)
+ $args['id'] = $id;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->get($url,$args);
+ }
+
+ function update($status, $replying_to = false,$include_entities = true){
+ try{
+ $url = '/statuses/update';
+ $args = array();
+ $args['status'] = $status;
+ if($replying_to)
+ $args['in_reply_to_status_id'] = $replying_to;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ return $this->post($url, $args);
+ }catch(Exception $ex){
+ echo $ex->getLine." : ".$ex->getMessage();
+ }
+ }
+
+ function userTimeline($id = false, $since_id = false, $max_id = false, $count = false, $include_rts = true, $include_entities = true){
+ $url = '/statuses/user_timeline';
+ $args = array();
+ if($max_id)
+ $args['max_id'] = $max_id;
+ if($id)
+ $args['screen_name'] = $id;
+ if($count)
+ $args['count'] = $count;
+ if($since_id)
+ $args['since_id'] = $since_id;
+ if($include_rts)
+ $args['include_rts'] = $include_rts;
+ if($include_entities)
+ $args['include_entities'] = $include_entities;
+ $response = $this->get($url, $args);
+ return $response;
+ }
+
+ function trends_closest($lat = false, $long=false) {
+ $url = "/trends/closest";
+ $args = array();
+ if ($lat)
+ $args['lat'] = $lat;
+ if ($long)
+ $args['long'] = $long;
+ return $this->get($url, $args);
+ }
+
+ function trends_place($id = 1) {
+ $url = "/trends/place";
+ $args = array();
+ if ($id)
+ $args['id'] = $id;
+ return $this->get($url, $args);
+ }
+ /* ---------- Misc. ---------- */
+ function veverify($skip_status = false){
+ $url = '/account/verify_credentials';
+ $args = array('skip_status' => $skip_status);
+ return $this->get($url,$args);
+ }
+
+ function updateProfile($fields = array(), $skip_status = true){
+ $url = '/account/update_profile';
+ $args = array();
+ foreach( $fields as $pk => $pv ){
+ switch( $pk ){
+ case 'name' :
+ $args[$pk] = (string) substr( $pv, 0, 20 );
+ break;
+ case 'url' :
+ $args[$pk] = (string) substr( $pv, 0, 100 );
+ break;
+ case 'location' :
+ $args[$pk] = (string) substr( $pv, 0, 30 );
+ break;
+ case 'description' :
+ $args[$pk] = (string) substr( $pv, 0, 160 );
+ break;
+ default :
+ break;
+ }
+ $args['skip_status'] = $skip_status;
+ }
+ return $this->post($url, $args);
+ }
+
+ /* media */
+ function updateProfileImage($image, $skip_status = true) {
+ $url = '/account/update_profile_image';
+ $args = array();
+ if($image){
+ $args['image']=$image;
+ $args['skip_status']=$skip_status;
+ }
+ return $this->post($url, $args);
+ }
+
+ function updateProfileBackground($image, $tile = false, $skip_status = true) {
+ $url = '/account/update_profile_background_image';
+ $args = array();
+ if($image){
+ $args['image']=$image;
+ }
+ if($tile){
+ $args['tile']=($tile === 'true');
+ }
+ $args['skip_status']=$skip_status;
+ return $this->post($url, $args);
+ }
+
+ function updateMedia($status,$image,$replying_to = false) {
+ $url = 'statuses/update_with_media';
+ $args = array();
+ if($status) $args['status'] = $status;
+ if($replying_to) $args['in_reply_to_status_id'] = $replying_to;
+ $mul = array();
+ if($image) $mul['media'][] = $image;
+ return $this->post($url,$args,$mul);
+ }
+}
+