はじめに
「Twitterのbotを作る」と聞くとすごく難しそうなイメージですが、実際は「hello world」のツイートであれば数行のコードでサクッと実装できてしまいます。ただ、はまりやすい部分もあるので僕がはまったところを中心に解説しようと思います。
最終的にどうなるか
この先のステップに進む前に、以下の対応を進めると何ができるようになるのかの確認をします。
具体的には下記のコードでツイートが飛ばせるようになります。
<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
const CONSUMER_KEY = 'xxx';
const CONSUMER_SECRET = 'xxx';
const ACCESS_TOKEN = 'xxx';
const ACCESS_TOKEN_SECRET = 'xxx';
$connection = new TwitterOAuth( CONSUMER_KEY,CONSUMER_SECRET,ACCESS_TOKEN,ACCESS_TOKEN_SECRET);
$tweet = 'hello world';
$statues = $connection->post("statuses/update", ["status" => $tweet]);
?>
コードはたったこれだけです。
じゃあこれをコピペすればいいかと言うと事前準備がいくつか必要になります。
特にコード上に「xxx」となっている部分が4箇所ありますが、それらを手に入れないと実装はできません。
それでは実装方法に進んでいきましょう。
実装方法
ライブラリを利用
上記のコードの中に「vender/autoload.php」というrequireが出てきますが、まずはこのライブラリをとってくるところから始めます。
ライブラリはこちらにおいてあります。ダウンロードすることもできますが、composerを利用するのがおすすめです。
composer require abraham/twitteroauth
また、利用方法はこちらにも記載がありますので参照してみてください。
デベロッパー登録するためのTwitterアカウントの準備
まずはTwitterにアプリの登録をする必要があります。
アプリの登録にはTwitterのアカウントが必要です。
もしまだTwitterのアカウントがない場合は登録しましょう。
ちなみにここで言うアカウントとはbotがツイートするアカウントです。
「個人のTwitterアカウントがあるからそれで登録すればいい」と思って進めていくと、最後の最後で個人のアカウントがbotになってしまうので注意してください。
そしてもう1つ大事なのが、Twitterにデベロッパーとして登録するためには携帯電話番号が登録されているTwitterアカウントが必要だと言うことです。
ここで留意すべきは「登録する時には必要だが、登録が終わったら電話番号を剥がしても良い」と言うことです。
そのため、すでに別のアカウントで自分の電話番号を利用している場合でも、一度電話番号を付け替えてまた戻す、といったことは可能です。
アプリの登録
アカウントの準備ができたらTwitterのデベロッパーに登録しましょう。
所々で英語が混ざってきますが対して難しいことはないので気にせずに進んでいけば良いと思います。
デベロッパーの画面や登録手順ははコロコロ変わるのでここではあえて細かくはお伝えしませんが、そんなに困るところはないと思います。
トークンを手に入れる
トークン類(上のコードでxxxになっている部分)を手に入れるためにアプリの管理画面の下記の画面の矢印の部分をクリックします。


すると次のような画面が表示されます。
今回はAPIからツイートしたいので「Read and Write」を選択します。
アプリのcallback URLとサイトのURLは現時点では適当な値を入れておいても問題ありません。


これでツイートをするためのトークンを発行する準備が整いました。
このステップを忘れるとツイートできないトークンを発行してしまうことになるので注意してください。
次に矢印の部分「Keys and tokens」をクリックします。


表示された画面にそれぞれのトークンを発行するためのボタンが表示されています。欲しいのはConsummer Keysの部分とAccess Tokenの部分です。


Consumer Keysはアプリを発行した時に表示されるのでコピーしてあればそれをそのまま使えばいいですが、改めて発行し直しても問題ありません。
Access Tokenはここで初めて手に入るのでボタンを押して発行しましょう。


ひとつ前の画面に戻ると、赤枠の部分が更新されています。
ここで「Created with Read and Write permissions」となっていることを確認してください。
これで正しいトークンの取得ができました。
API 1.1のエンドポイントも叩けるようにする
上記でトークンが揃ったので完了のようにも見えるのですが、このままで実行すると
You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve
というエラーが表示されます。
詳細はよくわからないのですが、上記のステップで登録した場合はAPI v2のみ利用ができ、API v1を利用するには別途対応が必要というようなことのようです。
これに対する対応は、下図から行えます。


ここでApplyを押すとページが表示され、どんな目的で何を利用しようとしているのかを英語で記載する画面になります。
入力さえすれば審査は行われないので(とはいってもいつ審査になるかわからないので)大まかにどんな目的で何をしようとしているのかを記載しましょう。
実行する
上記の準備が整えば冒頭のコードでツイートができるようになります。
<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
const CONSUMER_KEY = 'xxx';
const CONSUMER_SECRET = 'xxx';
const ACCESS_TOKEN = 'xxx';
const ACCESS_TOKEN_SECRET = 'xxx';
$connection = new TwitterOAuth( CONSUMER_KEY,CONSUMER_SECRET,ACCESS_TOKEN,ACCESS_TOKEN_SECRET);
$tweet = 'hello world';
$statues = $connection->post("statuses/update", ["status" => $tweet]);
?>
不具合がある場合は下記のポイントを確認してみてください。
・「Read and Write」を選択しているか?
・「Read and Write」を選択した上で発行したAccess Tokenを利用しているか?
・API v1を利用するための登録が済んでいるか?
最後に
Twitter関連の開発はいろんな言語でできますが、これから学ぶならどの言語がコスパがいいかをまとめてみました。
よかったら合わせてご確認ください。