こんにちは、たろうです。
今日はTwitterAPIでbot投稿を再開したので、ちょっと技術的な話になるけど、忘備録を兼ねてPHPで実装した内容を書いておこうと思う。
ツイリアの契約も考えているけど、費用面の考慮と、プロキシ×自作bot投稿で凍結やリプバンがどれだけ発生するのかを検証したいので、まずは自分のVPSサーバーからbotで投稿を続けてみようと思う。
Xディベロッパー登録
まずはXのディベロッパー登録を行い、APIキーを取得する。

現在の無料プランで行えるのは、主に自分のアカウントの情報取得(フォロワー数など)と、投稿(ポスト)ぐらい。
投稿の取得は無料プランではできなくなっているので注意しよう。
無料プランに登録
APIキーはアカウントごとに発行する必要がある。
あらかじめ発行したいXのアカウントにログインしておこう。
①公式サイトへ移動
早速公式サイトに移動し、「Subscribe now」をクリック。

②無料プランの選択
一番下の「Sign up for Free Account」をクリック。

③利用ケースの申請
APIを利用するケースを記入し、各チェックを入れて「Submit」をクリック。
DeepL翻訳や文字数チェックサイトを活用して、250文字以上で記入しよう。

この段階で特に審査が入るわけではなさそうなので、
APIの使用目的やXのルールに従う旨をシンプルに書いておけばOK。

このようにダッシュボード画面が表示されれば、ディベロッパー登録は完了。

APIキーの取得
続いてAPI使用時に使うAPIキーを取得していこう。
①ユーザー認証設定
まずはこのアカウントの認証設定を済ませよう。

この認証設定を済ませておかないと、ツイートのできないRead権限のみのAPIキーが出来上がってしまうんだ。
ダッシュボード中央の「PROJECT APP」にある歯車をクリック。

続いて「User authentication settings」の「Set up」をクリック。

ユーザー認証の設定画面が表示されるので、以下のように設定を行う。
- App permissions
「Read and write」を選択。この設定のおかげでポストもできるAPIキーが作れる。 - Type of App
「Web App, Automated App or Bot」を選択。 - App info - Callback URI / Redirect URL
特に使わないので「https://x.com/」でおk。 - App info - Website URL
こちらも同様に「https://x.com/」でおk。


入力が完了したら右下の「Save」をクリックし、確認画面で「Yes」をクリックすれば登録は完了。
その後表示されるClientIDとClient Secretは今回は使わないので、スルーしてOK。
②APIキーの取得
ユーザー認証の設定が完了したら、いよいよ有効なAPIキーを取得していこう。
アプリの設定画面から、上部中央タブの「Keys and tokens」をクリック。

続いて「Consumer Keys」の「API Key and Secret」にある「Regenerate」をクリックし、
確認画面が表示されたら「Yes, regenerate」をクリック。

すると「API Key」と「API Key Secret」が表示されるので、それぞれ「Copy」をクリックして保存しておこう。

③アクセストークンの取得
続いてアクセストークンを取得する。
このトークンがアカウントを指定するものになる。
キー設定画面で「Access Token and Secret」の「Generate」をクリック。

すぐに発行されるので、こちらもそれぞれコピーして控えておこう。

これで必要な認証情報の4つがすべてそろった。後程使うので、無くさないように保存しておこう。
- API Key
- API Key Secret
- Access Token
- Access Token Secret
PHPで投稿
早速PHPでXにポストしてみよう。
使用するライブラリは、TwitterOAuth。
①ライブラリのインストール
公式のマニュアルにのっとり、composerで入れておこう。
composer require abraham/twitteroauth
②ライブラリのインポートとインスタンスの作成
composerでダウンロードしたライブラリをソースコード内で読み込み、クラスのインスタンスを作成する。
この時に先ほど用意した認証情報の4つをそれぞれ読み込ませよう。
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
// TwitterOAuthクラスのインスタンスを作成
$connect = new TwitterOAuth( $api_key, $api_key_secret, $access_token, $access_token_secret );
// Twitter API v2. を利用する
$connect->setApiVersion('2');
// プロキシの指定(プロキシを通してAPIを利用する場合のみ)
$connect->setProxy([
'CURLOPT_PROXY' => 'プロキシのIPアドレス',
'CURLOPT_PROXYUSERPWD' => 'プロキシのユーザー:パスワード',
'CURLOPT_PROXYPORT' => プロキシのポート番号,
]);
③投稿する
あとは投稿するだけ。
$post_data = array(
'text' => $body, #投稿したいツイート文
);
#返信したいときに該当のtweet_idを入れる。任意。
$post_data['reply'] = array(
'in_reply_to_tweet_id' => $reply_tweet_id
);
#投稿
$result = $connect->post(
'tweets',
$post_data
);
ちなみに無料プランでできることはかなり限られているが、該当アカウントのフォロワー数の取得とかはできた。
$result = $connect->get(
'users/me',
array(
'user.fields' => ['public_metrics'] // フォロワー数等
)
);
#この$resultの中のpublic_metricsにフォロワー数等の情報が入っている
これで投稿処理を作ってcronでうまいこと自動投稿をすれば、ツイリアのように楽な運用が見えてくる。
あとは凍結との戦いだろう。手動運用やプロキシの活用をして、上手に付き合っていきたいところ。