色々なTwitterライブラリがありますが、今回はabraham/twitteroauth
を使って、Twitterログイン・タイムライン、フォロー・フォロワーの取得をやってみました。
※ライブラリのgithubはこちらから
1. TwitterAppの作成
まずはTwitterAPIを利用するために必要な、TwitterAppを作成していきます。
手順は以下のような感じです。
これで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を利用するのですが、環境によって異なると思うので.env
とconfig
に記載しておきましょう。
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
<?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の取得
# 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
に遷移するので、こちら側の処理を書いていきます。
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_id
かscreen_name
が取得できるので、こちらの値を用いて問い合わせを行うことが可能となります。
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. フォローを取得する
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. フォロワーを取得する
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);
}