ビジネス

【鷹の目クラス】TwitterアカウントでAPIキーを使いまわす。

以前の自身のブログにて、Twitter API申請方法について解説をしましたが、今回はその続編。

Twitterアカウントにおいて、APIキーを使いまわす方法について解説をさせていただきます。

Twitter APIキーをいくつも取得したい方、自分のサブのアカウントでも取得したかったけれど2つ目のアカウントは申請の段階で弾かれてしまった。

そんな方に是非見ていただきたい記事になります。

ともき@晴れ男
ともき@晴れ男
難しい部分もありますが、一緒に見ていきましょう。

まずはAPIキーの種類を理解しよう!

Consumer Key:1ユーザにつき1つ ・Consumer Secret:1ユーザにつき1つ ・Access Token:アカウントごとに存在する (複数入手できる) ・Access Secret:アカウントごとに存在する (複数入手できる)

以上の4種類のキーがあることをまずは把握しましょう。

「Consumer Key」ではどのアプリかを特定し、「Consumer Secret」でアプリが本物かどうか判断します。

ともき@晴れ男
ともき@晴れ男
それぞれ身近なものに例えると、「身分証」と「暗証番号」の役割を果たしているわけです。

そして、アクセストークンは認証済みユーザーを識別するための文字列になります。

ともき@晴れ男
ともき@晴れ男
Access Token, Access Token Secret共に、ユーザーの情報にアクセスできる大事な情報です。他人に知られないように慎重に扱ってくださいね。

そして大事な点は、Consumer Keyは一度取得することで使いまわすことが可能になるのです。

次の項目からは残りの必要な二つの鍵の入手について触れていきます。

いよいよ鍵を入手!

以下の内容をコピーしてくださいm(__)m ”, // localhostだとこれは使えないらしいのでカラ。 ] ); if (!isset($res[‘oauth_token’])) { throw new Exception(‘レスポンス→ ‘.var_export($res, true)); } $_SESSION[‘oauth_token’] = $res[‘oauth_token’]; $_SESSION[‘oauth_token_secret’] = $res[‘oauth_token_secret’]; // リクエストトークンを持ってTiwtterの認証画面に行くリンクを表示 header(‘Content-Type: text/html’); $url = ‘https://api.twitter.com/oauth/authenticate?oauth_token=’.$res[‘oauth_token’]; echo ‘‘.$url.’‘; } else { //————————————– // 2. Twitterで認証して戻ってきた時 //————————————– // もらったパラメータ『oauth_verifier』をつけてAPIを叩き、アクセストークン取得 $res = post( ‘https://api.twitter.com/oauth/access_token’, [ ‘oauth_verifier’ => $_GET[‘oauth_verifier’], ], $_SESSION[‘oauth_token’], // セッションに保存していたリクエストトークンを署名に使う $_SESSION[‘oauth_token_secret’] // 同上 ); if (!isset($res[‘oauth_token’])) { throw new Exception(‘レスポンス→ ‘.var_export($res, true)); } // アクセストークンを画面に表示 header(‘Content-Type: text/html’); echo implode([ ‘成功!’, ‘Access Token: ‘.$res[‘oauth_token’], ‘Access Token Secret: ‘.$res[‘oauth_token_secret’], ‘User ID: ‘.$res[‘user_id’], ‘Screen Name: ‘.$res[‘screen_name’], ], ‘
‘); } } catch (Exception $e) { header(‘Content-Type: text/plain’); echo ‘失敗!: ‘.$e->getMessage(); } /** * 対象URLにOAuthの署名つきでPOSTし、結果を連想配列で返却する */ function post($url, $params, $token = null, $secret = null) { // curlでPOST $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_HTTPHEADER => [ createOAuthHeader($url, $params, $token, $secret) ], CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), ]); if (($res = curl_exec($ch)) === false) { throw new Exception(‘通信時にエラーが発生しました。’); } curl_close($ch); parse_str($res, $resArr); return $resArr; } /** * OAuth用のヘッダを作成して返却する */ function createOAuthHeader($url, $params, $token, $secret) { $sigparams = [ ‘oauth_consumer_key’ => CONSUMER_KEY, ‘oauth_signature_method’ => ‘HMAC-SHA1’, ‘oauth_timestamp’ => time(), ‘oauth_nonce’ => md5(uniqid(rand(), true)), ‘oauth_version’ => ‘1.0’, ]; if (isset($token)) { // リクエストトークンがあればセット $sigparams[‘oauth_token’] = $token; } $sigparams += $params; // ルール通りに署名を作成してセット // https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html ksort($sigparams); $data = ‘POST&’.rawurlencode($url).’&’.rawurlencode(http_build_query($sigparams, ”, ‘&’, PHP_QUERY_RFC3986)); // ここでは関係無いが、パラメータにスペースが含まれてる時用にRFC3986を明示的に指定 $key = rawurlencode(CONSUMER_SECRET).’&’; $key .= isset($secret) ? rawurlencode($secret) : ”; // リクエストトークンがあればセット $hash = hash_hmac(‘sha1’, $data, $key, true); $sigparams[‘oauth_signature’] = base64_encode($hash); return ‘Authorization: OAuth ‘.http_build_query($sigparams, ”, ‘,’); }

このコードを使用すれば使いまわしが可能になりますのでまずは自分が持っている最初のTwitterアカウントのConsumerキー2つを入力してください。

入力が終わったら、Cookieが有効なブラウザで、http://localhost/auth.php にアクセスしましょう。

すると、Twitterの認証画面のURLリンクが表示されるのでクリック。

Twitterの認証画面に飛ぶので、アクセストークンが欲しいアカウントでログインして認証すると残りの2つのキーを入手して終了です。2つのキーはエクセルファイルなどに保存しておきましょう。

ちょっと知っておきたいOauth認証について

Oauth認証という仕組みについてちょっと解説をさせていただきます。

ともき@晴れ男
ともき@晴れ男
Oauth認証は、ユーザにユーザIDやパスワードを提供してもらうことなく、ユーザのアカウントにアクセスできるため、広く使われている手法になります。

Oauthとは大雑把に言うと、IDやパスワードを入力することなく、複数のアプリケーション間での連動を可能にする仕組みになります。

たとえば、あなたがTwitterに画像を投稿したとして、その投稿が同時にFacebookにも投稿される。そんな連動した仕組みのことを指します。

仕組みとしては、まず。Aという人ががBというシステムに既に契約を結んでおり、自由に行き来することが出来るとします。

ここで、Cさんという外部の人がAの代理としてBというシステムにアクセスしたくなりました。

CさんBシステムに対して承認を取りたいので、Aから承認に使える鍵をもらいました。

しかし、疑り深いBシステムは本当に承認を得たのかどうかAに確認を取ります。

Aは確かに承認したことを伝え、CさんBシステムに晴れてアクセスできるようになりました。

このCさんBシステムに入れるようになるまでの仕組みをOauth認証と言い、アプリ間の共有に使われているシステムなのです。

最後に

API申請で行き詰っている人向けに今回の記事を書かせていただきました。

一度Consumerキーを取得すれば残りの鍵は生成することが出来るので、どうしてもAPI申請が通過しない場合は自力でのAccess Tokenの生成にチャレンジしれもいいかもしれません!