PHPでウェブの世界と繋がろう!
menu
ホーム > PHP と Twitter > Twitter ウェブアプリ > PHP と Twitter API で OAuth 認証を行う 「タイムライン取得」「呟き(つぶやき)投稿」「ログイン」

PHP と Twitter API で OAuth 認証を行う 「タイムライン取得」「呟き(つぶやき)投稿」「ログイン」

Pocket

[ Twitter API V1.1 対応はこちら! ]

説明

Twitter OAuth認証とは
 Twitter OAuth認証とはTwitterの認証方式です。Twitterは元々Basic認証でしたが、セキュリティー面の向上を図るためにOAuth認証へ変更されました。OAuthの仕様は記載されています。

Twitter OAuth認証で何が出来る?
 TwitterへOAuth認証で接続することで、Twitter API サービスを利用した様々なことが出来きるようになります。タイムラインの取得、つぶやきの検索、ツイートやリツイートなど、詳しくは API Documentation を参照下さい。

Twitter OAuth認証で接続 ・ホームタイムライン取得 ・つぶやき投稿 ・ログイン

※tryphp.netはご自分のドメインに置き換えて読み進めて下さい。

-1- Twitterアプリケーションを登録して「key」と「token」を取得
Twitterアカウントを取得している方は、以下のURLからTwitterアプリケーションの登録が出来ます。

URL:Twitter Applications

Twitterアプリケーションを登録して、「Consumer key」「Consumer secret」「Access token」「Access token secret」を取得してください。Twitterアカウントを取得していない方はTwitterアカウントを登録してからTwitterアプリケーションを登録してください。

-2- Twitterアカウントでログインする

-3- Create a new application
画面右の「Create a new application」をクリックする。

-4- 各項目を入力する

Name

Twitterアプリケーションの名前です。
アプリケーションの紹介や認証を許可する場合などに利用者に表示されます。
アプリケーションに適した名前を付けましょう。
アプリケーション名は既に他の人が使用している場合は登録する事ができません。

Description

Twitterアプリケーションの説明です。
Twitterアプリケーションに適した説明を記入しましょう。

WebSite

Twitterアプリケーションのウェブサイトです。ウェブアプリケーションとして使用する場合はこのURLがサービスサイトになります。

CallbackURL

ウェブアプリケーションとしてOAuthを利用する際に、認証後にジャンプする先のURLを指定します。

上記を入力して進んで下さい。

-5- 登録完了

登録が完了すると「Consumer key」「Consumer secret」が取得できます。
テキストなどにコピーしておいて下さい。

-6- Access tokenの取得

画面下の「Create my access token」ボタンをクリックしてください。
Access token」「Access token secret」が取得できます。
テキストなどにコピーしておいて下さい。

これでTwitterアプリケーションの登録は完了です。

-7- OAuth認証でTwitterアカウントのホームタイムラインを取得する
 登録したTwitterアプリケーションでTwitterアカウントのホームタイムラインを取得してみましょう。

-8- 動作環境
PHP Version 5以上であること(phpinfo();関数で確認)
cURL support enabledであること(phpinfo();関数で確認)

-9- Twitter OAuth認証を利用するためのスクリプトをダウンロード
 「github」サイトで「abraham」さんが提供しているOAuthライブラリ「twitteroauth」を使用してみます。(この部分をご自分で作成している方もいらっしゃいまづが大分大変なようです。)
以下のURLから「バージョン0.2.0」ファイルをダウンロードしてください。
「twitteroauth」の中に二つのファイルがあります。
twitteroauth/OAuth.php
twitteroauth/twitteroauth.php
これらを使用します。

URL:https://github.com/abraham/twitteroauth
ダウンロード:https://github.com/abraham/twitteroauth/downloads

-10- ファイルのアップロード
 ダウンロードしたファイルを解凍すると「twitteroauth」フォルダがあるので、フォルダの中にある「OAuth.php」ファイルと「twitteroauth.php」ファイルを利用します。
ドキュメントルート直下に「twitteroauth」フォルダを作成して、そのフォルダの中に「OAuth.php」「twitteroauth.php」をアップロードしてください。
本サイトの例:
http://www.tryphp.net/twitteroauth/OAuth.php
http://www.tryphp.net/twitteroauth/twitteroauth.php

-11- ホームタイムライン取得のサンプルコード
  • 「hometimeline.php」というファイルを作成して先ほどアップロードしたファイルと同じ階層にアップロードしてください。
  • 本サイトの例:http://www.tryphp.net/twitteroauth/hometimeline.php
  • 「hometimeline.php」には以下のコードを記述して下さい。「*******」部分の「key」や「token」には先ほど取得してテキストなどにコピーしたコードを入力して下さい。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TRYPHP! Twitter API V1.1 ホームタイムライン[ GET statuses/home_timeline ] サンプルコード</title>
</head>
<body>



<?php
//twitteroauth.phpをインクルードします。ファイルへのパスはご自分で決めて下さい。
require_once("./twitteroauth.php");

//TwitterAPI開発者ページでご確認下さい。
//Consumer keyの値を格納
$sConsumerKey = "**********************";
//Consumer secretの値を格納
$sConsumerSecret = "********************************************";
//Access Tokenの値を格納
$sAccessToken = "********************************************";
//Access Token Secretの値を格納
$sAccessTokenSecret = "********************************************";

//OAuthオブジェクトを生成する
$twObj = new TwitterOAuth($sConsumerKey,$sConsumerSecret,$sAccessToken,$sAccessTokenSecret);

//home_timelineを取得するAPIを利用。Twitterからjson形式でデータが返ってくる
$vRequest = $twObj->OAuthRequest("https://api.twitter.com/1.1/statuses/home_timeline.json","GET",array("count"=>"10"));

//Jsonデータをオブジェクトに変更
$oObj = json_decode($vRequest);


//オブジェクトを展開
if(isset($oObj->{'errors'}) && $oObj->{'errors'} != ''){
    ?>
    取得に失敗しました。<br/>
    エラー内容:<br/>
    

		


<?php
}else{
    //オブジェクトを展開
    $iCount = sizeof($oObj);;
    for($iTweet = 0; $iTweet<$iCount; $iTweet++){

        $iTweetId =                 $oObj&#91;$iTweet&#93;->{'id'};
        $sIdStr =                   (string)$oObj[$iTweet]->{'id_str'};
        $sText=                     $oObj[$iTweet]->{'text'};
        $sName=                     $oObj[$iTweet]->{'user'}->{'name'};
        $sScreenName=               $oObj[$iTweet]->{'user'}->{'screen_name'};
        $sProfileImageUrl =         $oObj[$iTweet]->{'user'}->{'profile_image_url'};
        $sCreatedAt =               $oObj[$iTweet]->{'created_at'};
        $sStrtotime=                strtotime($sCreatedAt);
        $sCreatedAt =               date('Y-m-d H:i:s', $sStrtotime);
        ?>
        <hr/>
        <h4><?php echo $sName; ?>さんのつぶやき</h4>
        <ul>
        <li>IDNO[id] : <?php echo $iTweetId; ?></li>
        <li>名前[name] : <?php echo $sIdStr; ?></li>
        <li>スクリーンネーム[screen_name] : <?php echo $sScreenName; ?></li>
        <li>プロフィール画像[profile_image_url] : <img src="<?php echo $sProfileImageUrl; ?>" /></li>
        <li>つぶやき[text] : <?php echo $sText; ?></li>
        <li>ツイートタイム[created_at] : <?php echo $sCreatedAt; ?></li>
        </ul>
<?php
    }//end for
}
?>



</body>
</html>

– サンプル Click Here ! –
Twitterアカウントのホームタイムラインが取得できます。

-12- つぶやき投稿のサンプルコード
  • tweetpost.php」というファイルを作成して先ほどアップロードしたファイルと同じ階層にアップロードしてください。
  • 本サイトの例:http://www.tryphp.net/twitteroauth/tweetpost.php
  • 「tweetpost.php」には以下のコードを記述して下さい。「*******」部分の「key」や「token」には先ほど取得してテキストなどにコピーしたコードを入力して下さい。
  • 登録したTwitterアプリケーションの「Settings」を「Settings」→「Application type」→「Read and Write」にして下さい。この設定にしないとAPIによる書き込みが出来ません。
    URL:Twitter Applications
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TRYPHP! Twitter API V1.1 つぶやきを更新[ POST statuses/update ] サンプルコード</title>
</head>
<body>



<?php
//twitteroauth.phpをインクルードします。ファイルへのパスはご自分で決めて下さい。
require_once("./twitteroauth.php");

//TwitterAPI開発者ページでご確認下さい。
//Consumer keyの値を格納
$sConsumerKey = "********************";
//Consumer secretの値を格納
$sConsumerSecret = "****************************************";
//Access Tokenの値を格納
$sAccessToken = "****************************************";
//Access Token Secretの値を格納
$sAccessTokenSecret = "****************************************";

//OAuthオブジェクトを生成する
$twObj = new TwitterOAuth($sConsumerKey,$sConsumerSecret,$sAccessToken,$sAccessTokenSecret);

//呟きをPOSTするAPI
$sTweet = "呟きのテスト投稿です。 (".date('Y-m-d H:i:s').")";
$vRequest = $twObj->OAuthRequest("https://api.twitter.com/1.1/statuses/update.json","POST",array("status" => $sTweet));

//Jsonデータをオブジェクトに変更
$oObj = json_decode($vRequest);

//エラー
if(isset($oObj->{'errors'}) && $oObj->{'errors'} != ''){
    ?>
    更新に失敗しました。<br/>
    エラー内容:<br/>
    

		


<?php
//投稿内容
}else{
?>
    <h3>投稿されたアカウント</h3>
    https://twitter.com/tryphp_test

    <h3>結果の表示</h3>
    

		


    <?php
}
?>



</body>
</html>

つぶやきを投稿する
– サンプル Click Here ! –

タイムラインを表示する
– サンプル Click Here ! –

以下のエラーが表示された場合は2重投稿のエラーです。同じつぶやき内容が弾かれているので違う内容をつぶやいて下さい。

 /1/statuses/update.xml Status is a duplicate. 

-12- ログインのサンプルコード
  • login.php」「logout.php」「callback.php」というファイルを作成して先ほどアップロードしたファイルと同じ階層にアップロードしてください。
  • 本サイトの例:http://www.tryphp.net/twitteroauth/login.php
  • 各ファイルには以下で紹介するサンプルコードを記述して下さい。「*******」部分の「key」や「token」にはTwitter Applicationで 取得したコードを入力して下さい。
  • login.php の $sCallBackUrl にはコールバック(ログイン後戻るページ)するURLを入力して下さい。
  • 本サイトの例:
    http://www.tryphp.net/twitteroauth/login.php
    http://www.tryphp.net/twitteroauth/logout.php
    http://www.tryphp.net/twitteroauth/callback.php
    http://www.tryphp.net/twitteroauth/OAuth.php
    http://www.tryphp.net/twitteroauth/twitteroauth.php

login.php

<?php
//SESSION開始
session_start();
//インクルード
require_once('./twitteroauth.php');
//Consumer keyの値をTwitterAPI開発者ページでご確認下さい。
$sConsumerKey = "*********************";
//Consumer secretの値を格納
$sConsumerSecret = "***************************************************************";
//callbakurl
$sCallBackUrl = 'http://www.tryphp.net/twitteroauth/callback.php';
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Type" content="text/html;">
<title>Twitter OAuth Login</title>
</head>
<body>

<?php
//セッションのアクセストークンのチェック
if((isset($_SESSION&#91;'oauthToken'&#93;) && $_SESSION&#91;'oauthToken'&#93; !== NULL) && (isset($_SESSION&#91;'oauthTokenSecret'&#93;) && $_SESSION&#91;'oauthTokenSecret'&#93; !== NULL)){

	//値の格納
	$sUserId = 			$_SESSION&#91;'userId'&#93;;
	$sScreenName = 		$_SESSION&#91;'screenName'&#93;;

	//表示
	?>
	ログインに成功しました。<br/>
	こんにちは! <?php echo $sScreenName; ?> さん<br/>
	ユーザーID <?php echo $sUserId; ?><br/>
	<br/>
	<a href="./logout.php">ログアウトする</a></p>

<?php
}else{

	//OAuthオブジェクト生成
	$oOauth = new TwitterOAuth($sConsumerKey,$sConsumerSecret);

	//callback url を指定して request tokenを取得
	$oOauthToken = $oOauth->getRequestToken($sCallBackUrl);

	//セッション格納
	$_SESSION['requestToken'] = 			$sToken = $oOauthToken['oauth_token'];
	$_SESSION['requestTokenSecret'] = 		$oOauthToken['oauth_token_secret'];

	//認証URLの引数 falseの場合はtwitter側で認証確認表示
	if(isset($_GET['authorizeBoolean']) && $_GET['authorizeBoolean'] != '')
	$bAuthorizeBoolean = false;
	else
	$bAuthorizeBoolean = true;

	//Authorize url を取得
	$sUrl = $oOauth->getAuthorizeURL($sToken, $bAuthorizeBoolean);
	?>
	<a href="<?php echo $sUrl; ?>">ログイン</a>

<?php } ?>

</body>
</html>

logout.php

<?php
//セッションスタート
session_start();
//セッション破棄
session_destroy();
//セッション変数初期化
$_SESSION&#91;''&#93; = array();
//ログインページへリダイレクト
header("Location: login.php?authorizeBoolean=2");
?>

callback.php

<?php
//SESSION開始
session_start();
//インクルード
require_once('./twitteroauth.php');
//Consumer keyの値をTwitterAPI開発者ページでご確認下さい。
$sConsumerKey = "*********************";
//Consumer secretの値を格納
$sConsumerSecret = "***************************************************************";

//URLパラメータからoauth_verifierを取得
if(isset($_GET&#91;'oauth_verifier'&#93;) && $_GET&#91;'oauth_verifier'&#93; != ''){
	$sVerifier = $_GET&#91;'oauth_verifier'&#93;;
}else{
	echo 'oauth_verifier error!';
	exit;
}

//リクエストトークンでOAuthオブジェクト生成
$oOauth = new TwitterOAuth($sConsumerKey,$sConsumerSecret,$_SESSION&#91;'requestToken'&#93;,$_SESSION&#91;'requestTokenSecret'&#93;);

//oauth_verifierを使ってAccess tokenを取得
$oAccessToken = $oOauth->getAccessToken($sVerifier);

//取得した値をSESSIONに格納
$_SESSION['oauthToken'] = 			$oAccessToken['oauth_token'];
$_SESSION['oauthTokenSecret'] = 	$oAccessToken['oauth_token_secret'];
$_SESSION['userId'] = 				$oAccessToken['user_id'];
$_SESSION['screenName'] = 			$oAccessToken['screen_name'];

//loginページへリダイレクト
header("Location: login.php");
?>

ログインする
– サンプル Click Here ! –


これで完了です。
その他様々なAPI機能が提供されているので是非試してみて下さい。
他のAPIの利用
API Documentation


タグ(=記事関連ワード)

タグ: , , ,

日付

投稿日:2011年9月27日
最終更新日:2014年02月01日

関連記事

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/utopics-phptwitteroauth1/trackback/