PHP
OAuth
laravel
TwitterAPI
TwitterOAuth

【Laravel5.5 × abraham TwitterOAuth】PHPでTwitter連携をつくってみた

色々なTwitterライブラリがありますが、今回はabraham/twitteroauthを使って、Twitterログイン・タイムライン、フォロー・フォロワーの取得をやってみました。
※ライブラリのgithubはこちらから

1. TwitterAppの作成

まずはTwitterAPIを利用するために必要な、TwitterAppを作成していきます。
手順は以下のような感じです。

  1. https://apps.twitter.com/ へアクセス

  2. 右上の「Create New App」をクリック
    twitter_app.png

  3. App名・詳細・Websiteを入力して作成
    Websiteは割と適当でもOKです。
    twitter_create_app.png

  4. 「Keys and Access Tokens」から自分のAPI Keyを取得
    twitter_app_keys.png

これでTwitterApp作成は完了です。
続いて早速Appを用いてApiを使っていきましょう。

2. Twitter連携

ここからはLaravel上でTwitterAPIをどのように使っていくのかについて書いていきます。
Laravelはインストールされている前提で話を進めていきます。

2-1. abraham/twitteroauth のインストール

composer require abraham/twitteroauth 

2-2. OAuth認証でログインする

これでTwitterOAuthは使えるようになったので、続いてOAuth認証を行っていきます。

2-2-1. configファイルの作成

認証を行う際に、先ほど発行したAPI Keyを利用するのですが、環境によって異なると思うので.envconfigに記載しておきましょう。

.env
TWITTER_CONSUMER_KEY=xxxxxxxxxxxx
TWITTER_CONSUMER_SECRET=xxxxxxxxxxxx
TWITTER_ACCESS_TOKEN=xxxxxxxxxxxx
TWITTER_ACCESS_TOKEN_SECRET=xxxxxxxxxxxx
TWITTER_CALLBACK_URL=http://xxxx.com/login/twitter/callback
config/twitter.php
<?php
# configファイルは自作してください。
return [
    'consumer_key' => env('TWITTER_CONSUMER_KEY', ''),
    'consumer_secret' => env('TWITTER_CONSUMER_SECRET', ''),
    'access_token' => env('TWITTER_ACCESS_TOKEN', ''),
    'access_token_secret' => env('TWITTER_ACCESS_TOKEN_SECRET', ''),
    'callback_url' => env('TWITTER_CALLBACK_URL', ''),
];

API Keyを記載し、使う準備が整ったので、OAuth認証をしていきます。

2-2-2. request_tokenの取得

LoginController.php@twitter
# useを忘れずに!
use Abraham\TwitterOAuth\TwitterOAuth;

class LoginController extends Controller
    public function twitter()
    {
        $twitter = new TwitterOAuth(
            config('twitter.consumer_key'),
            config('twitter.consumer_secret')
        );
        # 認証用のrequest_tokenを取得
        # このとき認証後、遷移する画面のURLを渡す
        $token = $twitter->oauth('oauth/request_token', array(
            'oauth_callback' => config('twitter.callback_url')
        ));

        # 認証画面で認証を行うためSessionに入れる
        session(array(
            'oauth_token' => $token['oauth_token'],
            'oauth_token_secret' => $token['oauth_token_secret'],
        ));

        # 認証画面へ移動させる
        ## 毎回認証をさせたい場合: 'oauth/authorize'
        ## 再認証が不要な場合: 'oauth/authenticate'
        $url = $twitter->url('oauth/authenticate', array(
            'oauth_token' => $token['oauth_token']
        ));

        return redirect($url);
    }

2-2-3. callback処理

続いてrequest_tokenを取得する際にパラメーターとして渡した、oauth_callbackに遷移するので、こちら側の処理を書いていきます。

LoginController.php@twitterCallback
    public function twitterCallback(Request $request)
    {
        $oauth_token = session('oauth_token');
        $oauth_token_secret = session('oauth_token_secret');

        # request_tokenが不正な値だった場合エラー
        if ($request->has('oauth_token') && $oauth_token !== $request->oauth_token) {
            return Redirect::to('/login');
        }

        # request_tokenからaccess_tokenを取得
        $twitter = new TwitterOAuth(
            $oauth_token,
            $oauth_token_secret
        );
        $token = $twitter->oauth('oauth/access_token', array(
            'oauth_verifier' => $request->oauth_verifier,
            'oauth_token' => $request->oauth_token,
        ));

        # access_tokenを用いればユーザー情報へアクセスできるため、それを用いてTwitterOAuthをinstance化
        $twitter_user = new TwitterOAuth(
            config('twitter.consumer_key'),
            config('twitter.consumer_secret'),
            $token['oauth_token'],
            $token['oauth_token_secret']
        );

        # 本来はアカウント有効状態を確認するためのものですが、プロフィール取得にも使用可能
        $twitter_user_info = $twitter_user->get('account/verify_credentials');
        dd($twitter_user_info);
    }

2-3. タイムラインを取得する

一度、OAuth認証に成功してしまえば、user_idscreen_nameが取得できるので、こちらの値を用いて問い合わせを行うことが可能となります。

LoginController.php@getTimeline
    public function getTimeline(Request $request)
    {
        # userがある前提です
        $user = User::find(Auth::user()->user_id);

        $twitter = new TwitterOAuth(
            config('twitter.consumer_key'),
            config('twitter.consumer_secret')
        );
        # 指定したユーザーのタイムラインを取得
        $timeline = $twitter->get('statuses/user_timeline', array(
            'user_id' => Auth::User()->twitter_id,
        ));
        dd($ret);
    }

2-4. フォローを取得する

LoginController.php@getFollowList
    public function getFollowList(Request $request)
    {
        # userがある前提です
        $user = User::find(Auth::user()->user_id);

        $twitter = new TwitterOAuth(
            config('twitter.consumer_key'),
            config('twitter.consumer_secret')
        );
        # 指定したユーザーのフォローを取得
        $timeline = $twitter->get('friends/list', array(
            'user_id' => Auth::User()->twitter_id,
        ));
        dd($ret);
    }

2-5. フォロワーを取得する

LoginController.php@getFollowerList
    public function getFollowerList(Request $request)
    {
        # userがある前提です
        $user = User::find(Auth::user()->user_id);

        $twitter = new TwitterOAuth(
            config('twitter.consumer_key'),
            config('twitter.consumer_secret')
        );
        # 指定したユーザーのフォロワーを取得
        $timeline = $twitter->get('followers/list', array(
            'user_id' => Auth::User()->twitter_id,
        ));
        dd($ret);
    }

参考文献