Created
September 11, 2011 09:10
-
-
Save 2no/1209364 to your computer and use it in GitHub Desktop.
TwitterOAuth でアイコンや背景画像が変更出来るように修正
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** @see TwitterAOauth */ | |
require_once 'twitteroauth/twitteroauth.php'; | |
$consumer_key = 'xxx'; | |
$consumer_secret = 'xxx'; | |
$oauth_token = 'xxx'; | |
$oauth_token_secret = 'xxx'; | |
$connection = new TwitterOAuth( | |
$consumer_key, | |
$consumer_secret, | |
$oauth_token, | |
$oauth_token_secret | |
); | |
// file | |
$connection->oAuthRequestImage('account/update_profile_background_image', | |
array('image' => 'img.png')); | |
// or | |
// binary | |
$connection->oAuthRequestImage('account/update_profile_background_image', | |
array('image' => file_get_contents('img.png'))); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Abraham Williams ([email protected]) http://abrah.am | |
* | |
* The first PHP Library to support OAuth for Twitter's REST API. | |
*/ | |
/* Load OAuth lib. You can find it at http://oauth.net */ | |
require_once('OAuth.php'); | |
/** | |
* Twitter OAuth class | |
*/ | |
class TwitterOAuth { | |
/* Contains the last HTTP status code returned. */ | |
public $http_code; | |
/* Contains the last API call. */ | |
public $url; | |
/* Set up the API root URL. */ | |
public $host = "https://api.twitter.com/1/"; | |
/* Set timeout default. */ | |
public $timeout = 30; | |
/* Set connect timeout. */ | |
public $connecttimeout = 30; | |
/* Verify SSL Cert. */ | |
public $ssl_verifypeer = FALSE; | |
/* Respons format. */ | |
public $format = 'json'; | |
/* Decode returned json data. */ | |
public $decode_json = TRUE; | |
/* Contains the last HTTP headers returned. */ | |
public $http_info; | |
/* Set the useragnet. */ | |
public $useragent = 'TwitterOAuth v0.2.0-beta2'; | |
/* Immediately retry the API call if the response was not successful. */ | |
//public $retry = TRUE; | |
/** | |
* 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); | |
} 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, $sign_in_with_twitter = TRUE) { | |
if (is_array($token)) { | |
$token = $token['oauth_token']; | |
} | |
if (empty($sign_in_with_twitter)) { | |
return $this->authorizeURL() . "?oauth_token={$token}"; | |
} else { | |
return $this->authenticateURL() . "?oauth_token={$token}"; | |
} | |
} | |
/** | |
* Exchange 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", | |
* "user_id" => "9436992", | |
* "screen_name" => "abraham") | |
*/ | |
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; | |
} | |
/** | |
* One time exchange of username and password for access token and secret. | |
* | |
* @returns array("oauth_token" => "the-access-token", | |
* "oauth_token_secret" => "the-access-secret", | |
* "user_id" => "9436992", | |
* "screen_name" => "abraham", | |
* "x_auth_expires" => "0") | |
*/ | |
function getXAuthToken($username, $password) { | |
$parameters = array(); | |
$parameters['x_auth_username'] = $username; | |
$parameters['x_auth_password'] = $password; | |
$parameters['x_auth_mode'] = 'client_auth'; | |
$request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); | |
$token = OAuthUtil::parse_parameters($request); | |
$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); | |
return $token; | |
} | |
/** | |
* GET wrapper for oAuthRequest. | |
*/ | |
function get($url, $parameters = array()) { | |
$response = $this->oAuthRequest($url, 'GET', $parameters); | |
if ($this->format === 'json' && $this->decode_json) { | |
return json_decode($response); | |
} | |
return $response; | |
} | |
/** | |
* POST wrapper for oAuthRequest. | |
*/ | |
function post($url, $parameters = array()) { | |
$response = $this->oAuthRequest($url, 'POST', $parameters); | |
if ($this->format === 'json' && $this->decode_json) { | |
return json_decode($response); | |
} | |
return $response; | |
} | |
/** | |
* DELETE wrapper for oAuthReqeust. | |
*/ | |
function delete($url, $parameters = array()) { | |
$response = $this->oAuthRequest($url, 'DELETE', $parameters); | |
if ($this->format === 'json' && $this->decode_json) { | |
return json_decode($response); | |
} | |
return $response; | |
} | |
/** | |
* Format and sign an OAuth / API request | |
*/ | |
function oAuthRequest($url, $method, $parameters) { | |
if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { | |
$url = "{$this->host}{$url}.{$this->format}"; | |
} | |
$request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); | |
$request->sign_request($this->sha1_method, $this->consumer, $this->token); | |
switch ($method) { | |
case 'GET': | |
return $this->http($request->to_url(), 'GET'); | |
default: | |
return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); | |
} | |
} | |
function oAuthRequestImage($url, $args) { | |
$method = 'POST'; | |
if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { | |
$url = "{$this->host}{$url}.{$this->format}"; | |
} | |
$request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, array()); | |
$request->sign_request($this->sha1_method, $this->consumer, $this->token); | |
$headers = array($request->to_header()); | |
if (isset($args['image'])) { | |
if (file_exists($args['image'])) { | |
$binary = file_get_contents($args['image']); | |
$fileInfo = pathinfo($args['image']); | |
$basename = $fileInfo['basename']; | |
} else { | |
$binary = $args['image']; | |
$basename = 'image'; | |
} | |
preg_match('/\A(?:(\xff\xd8\xff)|(GIF8[79]a)|(\x89PNG\x0d\x0a))/', | |
$binary, $matches); | |
switch (count($matches) - 1) { | |
case 1: | |
$mimeType = 'image/jpeg'; | |
break; | |
case 2: | |
$mimeType = 'image/gif'; | |
break; | |
case 3: | |
$mimeType = 'image/png'; | |
break; | |
default: | |
$mimeType = 'application/octet-stream'; | |
break; | |
} | |
$boundary = md5(time()); | |
$content = '--' . $boundary . "\r\n" | |
. 'Content-Disposition: form-data; name=image; ' | |
. 'filename="' . $basename . "\"\r\n" | |
. 'Content-Type: ' . $mimeType . "\r\n" | |
. "\r\n" . $binary . "\r\n" | |
. '--' . $boundary . '--'; | |
$headers[] = 'Content-Type: multipart/form-data; boundary=' . $boundary; | |
$headers[] = 'Content-Length: ' . strlen($content); | |
$args = $content; | |
} | |
return $this->http($request->get_normalized_http_url(), $method, $args, $headers); | |
} | |
/** | |
* Make an HTTP request | |
* | |
* @return API results | |
*/ | |
function http($url, $method, $postfields = NULL, $headers = array()) { | |
$this->http_info = array(); | |
$ci = curl_init(); | |
/* Curl settings */ | |
curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); | |
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); | |
curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); | |
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); | |
curl_setopt($ci, CURLOPT_HTTPHEADER, array_merge(array('Expect:'), $headers)); | |
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); | |
curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); | |
curl_setopt($ci, CURLOPT_HEADER, FALSE); | |
switch ($method) { | |
case 'POST': | |
curl_setopt($ci, CURLOPT_POST, TRUE); | |
if (!empty($postfields)) { | |
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); | |
} | |
break; | |
case 'DELETE': | |
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); | |
if (!empty($postfields)) { | |
$url = "{$url}?{$postfields}"; | |
} | |
} | |
curl_setopt($ci, CURLOPT_URL, $url); | |
$response = curl_exec($ci); | |
$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); | |
$this->http_info = array_merge($this->http_info, curl_getinfo($ci)); | |
$this->url = $url; | |
curl_close ($ci); | |
return $response; | |
} | |
/** | |
* Get the header info to store. | |
*/ | |
function getHeader($ch, $header) { | |
$i = strpos($header, ':'); | |
if (!empty($i)) { | |
$key = str_replace('-', '_', strtolower(substr($header, 0, $i))); | |
$value = trim(substr($header, $i + 2)); | |
$this->http_header[$key] = $value; | |
} | |
return strlen($header); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment