Twitterアプリケーション を登録して、Access Token を取得する手順 |
|
関連する記事
PHP + Twitter API : 資格情報の確認と アプリケーションに割り当てられた My Access Token
Acquiring.php
<?
session_start();
// **********************************************************
// Acquiring a request token
// **********************************************************
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );
// **********************************************************
// AOuth 用の urlencode 関数
// **********************************************************
function url_rfc3986( $str ) {
// php 5.3.x 〜 ではこの変換は必要無い
return str_replace('%7E', '~', rawurlencode($str));
}
// **********************************************************
// API ( SSL is recommended )
// **********************************************************
$twitter_url = 'https://api.twitter.com/oauth/request_token';
// **********************************************************
// 認証データ
// **********************************************************
$oauth_consumer_key = "Consumer key";
$oauth_consumer_secret = "Consumer secret";
$oauth_token = "";
$oauth_secret = "";
// 毎回変化するランダムな文字列
$mt = microtime();
$rand = mt_rand();
$oauth_nonce = md5($mt . $rand);
$oauth_signature_method = "HMAC-SHA1";
$oauth_timestamp = mktime();
$oauth_version = "1.0";
// コールバック url
$oauth_callback = "http://localhost/web/twitter_api/callback.php";
// *********************************************************
// シグネチャ用ベース文字列作成
/*
httpMethod + "&" +
url_encode( base_uri ) + "&" +
sorted_query_params.each { | k, v |
url_encode ( k ) + "%3D" +
url_encode ( v )
}.join("%26")
*/
// *********************************************************
$base_string = "POST";
$base_string .= "&" . url_rfc3986($twitter_url);
$base_string .= "&";
$base_string .= url_rfc3986("oauth_callback")."%3D".url_rfc3986(url_rfc3986($oauth_callback))."%26";
$base_string .= url_rfc3986("oauth_consumer_key")."%3D".url_rfc3986($oauth_consumer_key)."%26";
$base_string .= url_rfc3986("oauth_nonce")."%3D".url_rfc3986($oauth_nonce)."%26";
$base_string .= url_rfc3986("oauth_signature_method")."%3D".url_rfc3986($oauth_signature_method)."%26";
$base_string .= url_rfc3986("oauth_timestamp")."%3D".url_rfc3986($oauth_timestamp)."%26";
$base_string .= url_rfc3986("oauth_version")."%3D".url_rfc3986($oauth_version);
// *********************************************************
// シグネチャ作成
/*
url_encode( consumer_secret ) + "&" +
url_encode( oauth_token_secret || nil )
*/
// *********************************************************
$oauth_signature =
base64_encode( hash_hmac(
"sha1",
$base_string,
url_rfc3986($oauth_consumer_secret) . "&",
true
));
// *********************************************************
// curl 処理
// *********************************************************
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $twitter_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "");
// *********************************************************
// http ヘッダ作成
// *********************************************************
$header = array();
$header[] = 'Expect:';
$header[] = 'Authorization: OAuth '.
url_rfc3986("oauth_nonce")."=\"".url_rfc3986($oauth_nonce)."\",".
url_rfc3986("oauth_callback")."=\"".url_rfc3986($oauth_callback)."\",".
url_rfc3986("oauth_signature_method")."=\"".url_rfc3986($oauth_signature_method)."\",".
url_rfc3986("oauth_timestamp")."=\"".url_rfc3986($oauth_timestamp)."\",".
url_rfc3986("oauth_consumer_key")."=\"".url_rfc3986($oauth_consumer_key)."\",".
url_rfc3986("oauth_signature")."=\"".url_rfc3986($oauth_signature)."\",".
url_rfc3986("oauth_version")."=\"".url_rfc3986($oauth_version)."\"";
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// *********************************************************
// https 用
// *********************************************************
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
// *********************************************************
// 送信
// *********************************************************
$result = curl_exec($curl);
// *********************************************************
// 結果
// *********************************************************
print "<br>";
if($result === false) {
echo 'Curl error: ' . curl_error($curl);
}
else {
echo 'Operation completed without any errors';
}
curl_close($curl);
print "<br>";
parse_str($result,$arr);
print "<pre>";
print_r( $arr );
print "</pre>";
$_SESSION['oauth_token_secret'] = $arr['oauth_token_secret'];
?>
<a href="https://api.twitter.com/oauth/authorize?oauth_token=<?= $arr['oauth_token'] ?>">Twitterで許可</a>
|
"/oauth/authorize?oauth_token=最初に取得したトークン" へ移動 |
|
|
|
callback.php
<?
session_start();
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );
// **********************************************************
// AOuth 用の urlencode 関数
// **********************************************************
function url_rfc3986( $str ) {
// php 5.3.x 〜 ではこの変換は必要無い
return str_replace('%7E', '~', rawurlencode($str));
}
print "<pre>";
print_r( $_GET );
print_r( $_SESSION );
print "</pre>";
if ( $_SERVER['REQUEST_METHOD'] != 'POST' ) {
// 以下初期画面
?>
<form method="POST">
<input type="submit" value="送信"><br>
oauth_token :
<input
type="text"
name="oauth_token"
value="<?= $_GET['oauth_token'] ?>"
size="80"
><br>
oauth_verifier :
<input
type="text"
name="oauth_verifier"
value="<?= $_GET['oauth_verifier'] ?>"
size="80"
><br>
oauth_token_secret :
<input
type="text"
name="oauth_token_secret"
value="<?= $_SESSION['oauth_token_secret'] ?>"
size="80"
><br>
</form>
<?
exit();
}
//***********************************************************
// Exchanging a request token for an access token
//***********************************************************
// **********************************************************
// API ( SSL is recommended )
// **********************************************************
$twitter_url = 'https://api.twitter.com/oauth/access_token';
// **********************************************************
// 認証データ
// **********************************************************
$oauth_consumer_key = "Consumer key";
$oauth_consumer_secret = "Consumer secret";
$oauth_token = $_POST['oauth_token'];
$oauth_secret = $_POST['oauth_token_secret'];
// 毎回変化するランダムな文字列
$mt = microtime();
$rand = mt_rand();
$oauth_nonce = md5($mt . $rand);
$oauth_signature_method = "HMAC-SHA1";
$oauth_timestamp = mktime();
$oauth_version = "1.0";
// *********************************************************
// シグネチャ用ベース文字列作成
/*
httpMethod + "&" +
url_encode( base_uri ) + "&" +
sorted_query_params.each { | k, v |
url_encode ( k ) + "%3D" +
url_encode ( v )
}.join("%26")
*/
// *********************************************************
$base_string = "POST";
$base_string .= "&" . url_rfc3986($twitter_url);
$base_string .= "&";
$base_string .= url_rfc3986("oauth_consumer_key")."%3D".url_rfc3986($oauth_consumer_key)."%26";
$base_string .= url_rfc3986("oauth_nonce")."%3D".url_rfc3986($oauth_nonce)."%26";
$base_string .= url_rfc3986("oauth_signature_method")."%3D".url_rfc3986($oauth_signature_method)."%26";
$base_string .= url_rfc3986("oauth_timestamp")."%3D".url_rfc3986($oauth_timestamp)."%26";
$base_string .= url_rfc3986("oauth_token")."%3D".url_rfc3986($oauth_token)."%26";
$base_string .= url_rfc3986("oauth_verifier")."%3D".url_rfc3986($_POST['oauth_verifier']);
$base_string .= url_rfc3986("oauth_version")."%3D".url_rfc3986($oauth_version);
// *********************************************************
// シグネチャ作成
/*
url_encode( consumer_secret ) + "&" +
url_encode( oauth_token_secret || nil )
*/
// *********************************************************
$oauth_signature =
base64_encode( hash_hmac(
"sha1",
$base_string,
url_rfc3986($oauth_consumer_secret) . "&" . url_rfc3986($oauth_secret),
true
));
// *********************************************************
// curl 処理
// *********************************************************
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $twitter_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "");
// *********************************************************
// http ヘッダ作成
// *********************************************************
$header = array();
$header[] = 'Expect:';
$header[] = 'Authorization: OAuth '.
url_rfc3986("oauth_consumer_key")."=\"".url_rfc3986($oauth_consumer_key)."\",".
url_rfc3986("oauth_nonce")."=\"".url_rfc3986($oauth_nonce)."\",".
url_rfc3986("oauth_signature_method")."=\"".url_rfc3986($oauth_signature_method)."\",".
url_rfc3986("oauth_timestamp")."=\"".url_rfc3986($oauth_timestamp)."\",".
url_rfc3986("oauth_token")."=\"".url_rfc3986($oauth_token)."\",".
url_rfc3986("oauth_verifier")."=\"".url_rfc3986($_POST['oauth_verifier'])."\",".
url_rfc3986("oauth_signature")."=\"".url_rfc3986($oauth_signature)."\",".
url_rfc3986("oauth_version")."=\"".url_rfc3986($oauth_version)."\"";
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// *********************************************************
// https 用
// *********************************************************
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
// *********************************************************
// 送信
// *********************************************************
$result = curl_exec($curl);
// *********************************************************
// 結果
// *********************************************************
print "<br>";
if($result === false) {
echo 'Curl error: ' . curl_error($curl);
}
else {
echo 'Operation completed without any errors';
}
curl_close($curl);
print "<br>";
parse_str($result,$arr);
print "<pre>";
print_r( $arr );
print "</pre>";
?>
|
|