今まではGo言語で作ったTwitter botを動かしていたのですが、Twitter APIのv1.1が使えなくなったことで正常に動作しなくなりました。
このTwitter botはただツイートしているだけのものです。
ユーザー情報を取得したり、ツイートを検索したり等は一切行っていません。
ただ単にツイート用のエンドポイントをv2のものにすれば解決しそうです。
しかし使わせていただいている、Twitter APIを扱いやすくするパッケージがv1.1にしか対応しておらず、またv2対応のパッケージも見つけることができなかったので当該botを使い続けることは断念しました。
他の言語でTwitter API v2に対応したパッケージやライブラリがないかを探したところ、PHPとPythonには存在することが分かりましたので使い慣れたPHPで作ってみました。
前提条件
- 当該botを動かすサーバーでPHPが使えること
- Twitter APIの利用申請が通っていること
- Twitter APIを利用するアプリの登録が終わっていること
使わせていただいたPHPライブラリ
今回新たにPHPでbotを作成するにあたって下記のライブラリを使わせていただきました。
作者の方に感謝いたします。
twitteroauth
Twitter APIを扱うためのライブラリです。
phpdotenv
環境変数を.envファイルで扱うためのライブラリです。
ライブラリのインストール
詳細は各ライブラリのREADME.md等をご覧ください。
いずれもcomposerで簡単にインストールすることができます。
下記はcomposer.jsonの記述例です。
{
"require": {
"abraham/twitteroauth": "^5.0",
"vlucas/phpdotenv": "^5.5"
}
}
各ライブラリの使い方
各ライブラリの使い方をソースコードを交えて簡単に説明します。
詳細は各ライブラリのREADME.md等をご覧ください。
require __DIR__ . '/vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
// .envファイルの読み込み
$envFileName = $argv[1] ?? '.env';
Dotenv\Dotenv::createImmutable(__DIR__, $envFileName)->load();
// TwitterAPIの認証情報
$consumerKey = $_ENV['API_KEY'];
$consumerSecret = $_ENV['API_KEY_SECRET'];
$accessToken = $_ENV['ACCESS_TOKEN'];
$accessTokenSecret = $_ENV['ACCESS_TOKEN_SECRET'];
// TwitterAPI Clientの作成
$twitterClient = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
$twitterClient->setApiVersion('2');
// ツイート
$tweetString = 'ツイートのテスト';
$twitterClient->post('tweets', ['text' => $tweetString], true);
phpdotenv
環境変数を記述したファイルは下記のような内容になります。
API_KEY=
API_KEY_SECRET=
ACCESS_TOKEN=
ACCESS_TOKEN_SECRET=
{環境変数名}={値}で記述します。
phpdotenvで使うファイル名のデフォルト値は「.env」ですが必要に応じて別のファイル名を使うこともできます。
今回の例ではPHPスクリプトを実行する際に引数として渡したファイル名を使うようにしています。
無指定の場合は「.env」を使います。
createImmutableメソッドの第二引数がファイル名になるようです。
loadメソッドを呼ぶことでグローバル変数$_ENVに値がセットされ、以降は$_ENV[{環境変数名}]で値を取得することができます。
twitteroauth
Twitterの開発者用ページでアプリを登録した際に発行されるAPI KeyやAPI Key Secretを引数としてTwitterOAuthインスタンスを生成して使います。
setApiVersionで2を指定することを忘れないようにしてください。
(これがないとv1.1を使うことになります)
その後、postメソッドを使って実際のツイートを行います。
その他の呼び出せるエンドポイントについてはTwitterが公開しているドキュメントを参照してください。
アプリをプロジェクトに紐付ける
Twitter API v2を使う場合はアプリをプロジェクトに紐付ける必要があるようです。
Standalone AppsのままだとTwitter API v2を呼ぶことはできないようです。
プログラムを動かすとプロジェクトに紐付けるようメッセージが表示されてエラーになります。
Twitter APIに関する記事
Twitter APIに関する記事をいくつか作成しています。
こちらもあわせてご覧ください。
まとめ
素晴らしいライブラリのおかげで非常に簡単にTwitter API v2を使うように改修することができました。
ライブラリの作者の方に心よりお礼を申し上げます。
ありがとうございました。
この記事がTwitter API v2をつかって何らかの処理をしたい方の参考になれば幸いです。
コメント