環境
- PHP8
- MySQL
使用したライブラリ
簡単な手順
事前準備
- Twitter アカウントを用意する。(Eメール認証、電話番号認証あり)
- Developer Portal に登録する。
- プロジェクトを作る
- API Key と API Key Secret をコピーしておく。
- アプリ認証画面から戻ってくるための Callback URL を設定する。
- 開発用と本番用で分けるのであれば「 + Add App 」で増やして管理すればいいと思う。
- Developer Portal にてアクセスレベルを Essential から Elevated に上げる。
開発過程
- POST oauth/request_token にて oauth_token を取得する。
- oauth_token を使ってアプリケーション認証画面を表示させる。 URL は GET oauth/authenticate の Example request を参照
- 認証画面から Callback URL で指定した URL に戻る。
- 認証が成功していればクエリに oauth_token と oauth_verifier が付与されている
- oauth_token と oauth_verifier を使って POST oauth/access_token にアクセスし、 oauth_token と oauth_token_secret を取得する。
- API Key, API Secret Key, oauth_token, oauth_token_secret の4つを使って Twitter API を使用する。
サンプルコード抜粋
Twitter OAuth API を利用する
- TwitterOAuth では oauth/xxxxx にアクセスする時は $connection->oauth($endpoint, $params); を使用することに注意する。
- 一旦 CONSUMER_KEY と、 CONSUMER_SECRET だけでいい。
- 3レッグ認証OAuthフローを使用したユーザーアクセストークンの取得
- API Key と Consumer Key と oauth_consumer_key はイコールらしい
- API Key Secret と Consumer Secret と oauth_consumer_secret はイコールらしい
<?php
use Abraham\TwitterOAuth\TwitterOAuth;
// コピーしておいた API Key と API Key Secret を用意する
// $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$connection = new TwitterOAuth('API key', 'API Key Secret', '', '');
// リクエストトークン取得
$requestToken = (object) $connection->oauth('oauth/request_token');
var_dump($requestToken);
?>
認証画面の URL
<?php
header("https://api.twitter.com/oauth/authenticate?oauth_token={$requestToken->oauth_token}");
exit;
?>
Callback URL で戻ってきた後
- $queries にクエリパラメータが入っている想定
- oauth_token と oauth_token_secret を取得する。
<?php
$oauthToken = isset($queries['oauth_token']) ? $queries['oauth_token'] : '';
$oauthVerifier = isset($queries['oauth_verifier']) ? $queries['oauth_verifier'] : '';
// アクセストークン取得
$accessToken = (object) $connection->oauth('oauth/access_token', [
'oauth_token' => $oauthToken,
'oauth_verifier' => $oauthVerifier,
]);
var_dump($accessToken);
?>
Twitter API を利用して自分の Twitter アカウント情報を取得する
- GET account/verify_credentials を使用してみる。
- 3レッグ認証OAuthフローを使用したユーザーアクセストークンの取得
- Access token と oauth_token はイコールらしい
- Access token secret と oauth_token_secret はイコールらしい
<?php
use Abraham\TwitterOAuth\TwitterOAuth;
// $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$connection = new TwitterOAuth('API key', 'API Key Secret', $accessToken->oauth_token, $accessToken->oauth_token_secret);
$response = $connection->get('account/verify_credentials');
var_dump($response);
?>
最後に
後は、 Twitter アカウント情報と自分のサービスのアカウント情報を紐づけるテーブルを作成すれば終わり。
Twitter のユーザー ID で紐づける時は text か bigint あたりでカラム作らないと数字がでかすぎて int じゃ収まらないので注意。