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

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

Pocket

説明

Twitter OAuth認証とは
 Twitter OAuth認証とはTwitterの認証方式です。Twitterは元々Basic認証でしたが、セキュリティー面の向上を図るためにOAuth認証へ変更されました。Twitter API V1.1 からは、すべての情報取得にOAuth認証が必要になります。OAuthの仕様は記載されています。

Twitter OAuth認証で何が出来る?
 Twitter application(My applications) へOAuth認証接続することで、Twitter API サービスを利用することが出来ます。Twitter API では、タイムラインの取得、リストの取得、つぶやきの検索、ツイートやリツイートなどの機能が用意されており、これらの機能をウェブアプリケーションやスマートフォンアプリケーションに実装することが出来ます。

詳しくは API Documentation を参照下さい。
Twitter API V1.1 API制限:https://dev.twitter.com/docs/rate-limiting/1.1/limits

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アカウントでログインする
URL:Twitter Applications

username と password を入力してログインしてください。

tw11_001

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

tw11_002

-4- 各項目を入力する
tw11_003
Name

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

Description

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

WebSite

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

CallbackURL

ウェブアプリケーションとして公開し、ユーザーに認証を求める場合、ログイン後戻るURLになります。

各項目の入力が完了したら、「Yes, I agree」にチェックし、画面一番下の「Create your Twitter application」ボタンを押してアプリケーションを作成してください。

-5- 登録完了

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

tw11_004

-6- Access tokenの取得

次にAccess tokenを生成して取得するのですが、Access tokenを取得する前に、「Application Type」の設定を変更したいと思います。メニューの「Settings」ボタンをクリックしてください。このページに「Application Type」の項目があります。ラジオボタンで3つの選択項目が並んでいますが、「Read, Write and Access direct messages」を選択して下さい。選択が完了したら画面一番したの「Update this Twitter application’s settings」ボタンをクリックしてください。更新が正常に完了すると、「Read, Write and Access direct messages」がチェックされている状態になります。更新後チェックされているか確認してください。こうすることで、ダイレクトメッセージなどのAPIも稼動させることが出来ます。

tw11_006

次に、メニューの「Details」ボタンをクリックして、初期画面に戻って下さい。ページ一番下に、「Recreate my access token」というボタンがあるので、クリックしてください。

tw11_005

Your access token が生成されます。
Access token」「Access token secret」が取得できます。
テキストなどにコピーしておいて下さい。

tw11_007

これで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/tree/master/twitteroauth

-10- ファイルのアップロード
ダウンロードした「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
    http://www.tryphp.net/twitteroauth/OAuth.php
    http://www.tryphp.net/twitteroauth/twitteroauth.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>
    

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

    -12- つぶやき投稿のサンプルコード
  • tweetpost.php」というファイルを作成して先ほどアップロードしたファイルと同じ階層にアップロードしてください。
  • 本サイトの例:
    http://www.tryphp.net/twitteroauth/tweetpost.php
  • 「tweetpost.php」には以下のコードを記述して下さい。「*******」部分の「key」や「token」には先ほど取得してテキストなどにコピーしたコードを入力して下さい。
  • 登録したTwitterアプリケーション(My applications)の「Settings」を「Settings」→「Application type」→「Read, Write and Access direct messages」にして下さい。この設定にしないとAPIによる書き込みが出来ません。
    Twitterアプリケーション(My 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 ! –

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

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

    -12- ログインのサンプルコード
  • login.php」「logout.php」「callback.php」というファイルを作成して先ほどアップロードしたファイルと同じ階層にアップロードしてください。
  • 本サイトの例:
    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
  • 各ファイルには以下で紹介するサンプルコードを記述して下さい。「*******」部分の「key」や「token」にはTwitter Applicationで 取得したコードを入力して下さい。
  • login.php の $sCallBackUrl にはコールバック(ログイン後戻るページ)するURLを入力して下さい。また、Twitterアプリケーションの「Callback URL」もログイン後に戻るウェブサイトのURLを入力して下さい。
  • 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");
    ?>
    

    ログイン→ID、PASSWORD入力→連携アプリを認証→ログイン成功→ログアウト
    – サンプル Click Here ! –


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


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

    日付

    投稿日:2013年10月25日
    最終更新日:2014年02月01日

    関連記事

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

    この記事へのコメント

    トラックバックurl

    http://www.tryphp.net/twitterapiv11_webapp/trackback/