6
6

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.

PHPでTwitter APIのアクセストークンを取得する

Last updated at Posted at 2019-07-01

はじめに

初投稿です。
初めて触ったWebAPIなので備忘録がてらに書き残しておきます。

前準備

TwitterDeveloppersから開発者アカウントを取得します。Appを作成しConsumerKeyの生成を取得までを済ませてください。
開発者アカウントの取得方法については割愛します。今日の時点(2019年7月1日)では私が申請した頃と申請フローが変更されていました…

それからTwitterOAuthのライブラリを導入してください。TwitterAPIのリクエストが格段に便利になるすごいライブラリです。
導入方法はComposerでも何でもいいですがComposerが楽だと思います。公式With Composerが参考になるはずです。

手順

  1. oauth/request_tokenからリクエストトークンを取得する
  2. https://api.twitter.com/oauth/authorizeに取得したリクエストトークンを合わせて飛ばす
  3. Twitter上でログイン→連携アプリを認証→コールバックに指定したページに戻ってくる
  4. oauth/access_tokenで認証

だいたいこんな流れです。

実装

access_token.php
<?php
session_start();
require_once($_SERVER['DOCUMENT_ROOT'] . "/vendor/autoload.php");

use Abraham\TwitterOAuth\TwitterOAuth;

// 設定項目
$con_key = "*****"; // Consumer Key
$con_secret = "*****";  // Consumer Secret
$callback_url = "http://" . $_SERVER["HTTP_HOST"]  . "access_token.php";  // Callback URL

// 3. コールバックに指定したページに戻ってくる
if ($_GET) {
    // 
    $twitter = new TwitterOAuth($con_key, $con_secret, $_GET['oauth_token'], $_SESSION['oauth_secret']);

    // 4. oauth/access_tokenで認証
    $params = [
        'oauth_verifier' => $_GET["oauth_verifier"],
    ];
    $access_token = $twitter->oauth('oauth/access_token', $params);

    foreach ($access_token as $key => $value) {
        echo $account_status[$key] = $value;
        echo "<br/>";
    }

    session_destroy();
    ?>
    <a href="<?= $callback_url ?>">もう一度認証する</a>
<?php

    // 1. oauth/request_tokenからリクエストトークンを取得する
} else {
    //TwitterOAuthの仕様準備
    $twitter = new TwitterOAuth($con_key, $con_secret);
    $params = [
        "oauth_callback" => $callback_url,
        "x_auth_access_type" => "write"
    ];

    $request_token = $twitter->oauth('oauth/request_token', $params);
    $_SESSION["oauth_secret"] = $request_token["oauth_token_secret"];

    // 2. https://api.twitter.com/oauth/authorizeに取得したリクエストトークンを合わせて飛ばす
    header("Location: https://api.twitter.com/oauth/authorize?oauth_token=" . $request_token["oauth_token"]);
}

解説

手順辿りつつピックアップ。

$callback_url = "http://" . $_SERVER["HTTP_HOST"]  . "access_token.php";  // Callback URL

1枚のページでアクセストークンの取得を行うため$callback_urlにはこのページを指定。

$request_token = $twitter->oauth('oauth/request_token', $params);

oauthメソッドで手順1.のリクエストトークンを取得。

$_SESSION["oauth_secret"] = $request_token["oauth_token_secret"];

この後Twitterに遷移するためセッションにoauth_token_secretを保存。

header("Location: https://api.twitter.com/oauth/authorize?oauth_token=" . $request_token["oauth_token"]);

headerでTwitterの認証ページへ飛ばす。パラメータにさっき取得したリクエストトークンをつける。


ここからTwitter上の認証ページから戻ってきた処理

$twitter = new TwitterOAuth($con_key, $con_secret, $_GET['oauth_token'], $_SESSION['oauth_secret']);

TwitterOAuthを再度newする。今度は引数にConsumer Keyと取得したOAuth Key指定する。

$params = [
    'oauth_verifier' => $_GET["oauth_verifier"],
];
$access_token = $twitter->oauth('oauth/access_token', $params);

戻ってきた際に取得したoauth_verifierをパラメータにoauth/access_tokenへリクエスト。

これでアクセストークンが取得できました!これさえあれば好きなようにTwitterAPIが叩けます!

TwitterOauthがすごい話

初めて触ったときはCurlでリクエストしてたんでもう必死でした。TwitterOAuthが無かったら生きていけなかった。

今回はアクセストークンを取得する話でしたが,個人で使う分にベアラートークンさえあればAPIは叩けます。
以前はAPI叩くのにいちいちベアラートークンを取得してられっかよ!という状態だったので,1度取得してからローカルに大事に大事に保存していました。
しかしこのTwitterOAuthはConsumer Keyさえあれば勝手にベアラートークンを取得してgetなりpostのリクエストを飛ばしてくれるすごいやつなんです。すごい!
いつかTwitterOAuthがすごいって紹介記事書きたい。

ちなみにtmhOAuthという同様にTwitterAPIを叩くライブラリがあるのですが,こちらは5,6年前に更新が止まってます。
時間があるときにTwitterOAuthとtmhOAuthの比較記事も書けたらなーと考えています。

まとめ

うまくまとめられないなー至らないなーとぼやきながら四苦八苦で初投稿してみました。
引き出し開けつつこれはこれだよなあれはあれって頭の整理ができたことは事実なので今後も続けていきたいですね。
あとTwitterAPIの情報探してるとログイン認証だとかアプリ認証だとかコンシューマーキーだとかAPIキーだとか同じモノを指していても言葉が違ったりします。
その辺の認識?定義?を自分で整理できていると情報探すのが楽。

参考

Twitter REST APIの使い方

6
6
0

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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?