ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
Twitter で投稿する為のトークンを取得するコールバック後の Twitter アクセス ( No.0 )
日時: 2011/06/14 14:42
名前: lightbox



PHP : Twitter への投稿 : バージョン2
Twitter で投稿する為のトークンを取得するコールバック後のデータ表示

拡張子:
<?
session_start();
// **********************************************************
// Twitter への投稿 : バージョン2
// **********************************************************
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 urle( $str ) {
	// php 5.3.x 〜 ではこの変換は必要無い
	return str_replace('%7E', '~', rawurlencode($str));
}

// **********************************************************
// トークン取得 API ( SSL is recommended )
// **********************************************************
$twitter_url = 'https://api.twitter.com/oauth/access_token';

// **********************************************************
// 認証データ
// **********************************************************
$oauth_consumer_key = "アプリケーションページより取得";
$oauth_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 .= "&" . urle($twitter_url);
$base_string .= "&";

$base_string .= urle("oauth_consumer_key")."%3D".urle($oauth_consumer_key)."%26";
$base_string .= urle("oauth_nonce")."%3D".urle($oauth_nonce)."%26";
$base_string .= urle("oauth_signature_method")."%3D".urle($oauth_signature_method)."%26";
$base_string .= urle("oauth_timestamp")."%3D".urle($oauth_timestamp)."%26";
$base_string .= urle("oauth_token")."%3D".urle($oauth_token)."%26";
$base_string .= urle("oauth_verifier")."%3D".urle($_POST['oauth_verifier']);
$base_string .= urle("oauth_version")."%3D".urle($oauth_version);

// *********************************************************
// シグネチャ作成
/*
url_encode( consumer_secret ) + "&" +
url_encode( oauth_token_secret || nil )
*/
// *********************************************************
$oauth_signature = 
base64_encode( hash_hmac(
	"sha1",
	$base_string,
	urle($oauth_consumer_secret) . "&" . urle($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);

// *********************************************************
// http ヘッダ作成
// *********************************************************
$header = array();
$header[] = 'Expect:';
$header[] = 'Content-Length:';

$header[] = 'Authorization: OAuth '.
urle("oauth_consumer_key")."=\"".urle($oauth_consumer_key)."\",".
urle("oauth_nonce")."=\"".urle($oauth_nonce)."\",".
urle("oauth_signature_method")."=\"".urle($oauth_signature_method)."\",".
urle("oauth_timestamp")."=\"".urle($oauth_timestamp)."\",".
urle("oauth_token")."=\"".urle($oauth_token)."\",".
urle("oauth_verifier")."=\"".urle($_POST['oauth_verifier'])."\",".
urle("oauth_signature")."=\"".urle($oauth_signature)."\",".
urle("oauth_version")."=\"".urle($oauth_version)."\"";

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

// *********************************************************
// https 用
// *********************************************************
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);

// *********************************************************
// 戻された http ヘッダの出力
// *********************************************************
$handle = fopen("./header2.txt", "w");
curl_setopt($curl, CURLOPT_WRITEHEADER, $handle);

// *********************************************************
// 送信
// *********************************************************
$result = curl_exec($curl);


// *********************************************************
// 結果
// *********************************************************
print "<br>";

if($result === false) {
	print '送信処理にエラーが発生しました: ' . curl_error($curl);
}
else {
	print '送信処理は正常に終了しました';
}
curl_close($curl);

// *********************************************************
// 結果表示
// *********************************************************
print "<br>";

parse_str($result,$arr);
print "<pre>";
print_r( $arr );
print "</pre>";

// *********************************************************
// この値を使って投稿する
// *********************************************************
$_SESSION['twitter_consumer_key'] =	$arr['oauth_consumer_key'];
$_SESSION['twitter_consumer_secret'] =	$arr['oauth_consumer_secret'];
// Twitter のログイン状態を保存するには、以下を localStorage に保存
// ※ ( ログアウト処理が必要 )
$_SESSION['twitter_token'] =		$arr['oauth_token'];
$_SESSION['twitter_token_secret'] =	$arr['oauth_token_secret'];
// 以下の値はアプリケーション用
$_SESSION['twitter_user_id'] =			$arr['user_id'];
$_SESSION['twitter_screen_name'] =		$arr['screen_name'];
?>
<script type="text/javascript">
localStorage['twitter_token'] = '<?= $_SESSION['twitter_token'] ?>';
localStorage['twitter_token_secret'] = '<?= $_SESSION['twitter_token_secret'] ?>';
localStorage['twitter_user_id'] = '<?= $_SESSION['twitter_user_id'] ?>';
localStorage['twitter_screen_name'] = '<?= $_SESSION['twitter_screen_name'] ?>';
</script>