43
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-25

色々な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);
    }

参考文献

43
44
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?