Open7

php twitter bot作成

syysyy

Twitter Developerページで開発アカウントの申し込み

画面に沿って記入すれば申請できる。
他の記事を見ると許可が降りるまで数週間?待たされることもあるらしいが、個人開発として申し込んだからか一瞬で申請がおりた。

開発者ポータルサイトでアプリの登録などが行えるようになった。
https://developer.twitter.com/en/portal/dashboard

syysyy

プロジェクトの登録

Twitter APIを用いて何かするにはプロジェクトとアプリケーションを作成する。
1つのプロジェクトの中に複数の1つのアプリケーションを作成できる。

↓プロジェクトとアプリ名が両方ともbot_holidaysになっていて分かりにくいがスクショ

プロジェクトについて

複数の1つのアプリケーションを内包する
・ツイート上限数などのレート制限はプロジェクト単位で集計される
・プロジェクトごとにアクセスレベルとproduct tracksというサービスプランを決められる?
・レート制限はproduct tracksで決まる?
・使用可能なエンドポイントはアクセスレベルで決まる?

Basicアクセス レベルで Standard 製品トラックを使用している場合 、 前述の v2 エンドポイントで受信できるツイートは 1 か月あたり 500,000 件に制限されます。
アクセスレベルとproduct tracksの組み合わせでレート制限や

アクセスレベル

・twitter apiのサービスプランのこと
・Basic, Elevated, custom accessの3タイプ

Basic access

・無料。80%以上の開発者がこれでok

Elevated access

・使用可能なエンドポイントがより多い
・高度な信頼性機能の増加(どういう意味だろう)

custom access

・Elevatedでも足りない場合はこれ。カスタム提供してくれる

product tracks

レート制限が変わるのかな
・standard : ほとんどの開発向け
・研究 : 研究向け
・ビジネス : ビジネス向け

アプリについて

・エンドポイントアクセス時に必要な認証情報を管理する

他のユーザーに代わってリクエストを行う場合は、3本足のOAuthフローを使用する必要があります。これにより、ユーザーはアプリを承認し、ユーザーに代わって使用する一連のアクセストークンを提供できます。
・↑単なるbotとユーザーのTwitterに自動投稿するのでは手順が変わる

参考
↓プロジェクト
https://developer.twitter.com/en/docs/projects/overview
↓アクセスレベル
https://developer.twitter.com/en/products/twitter-api/early-access/guide#na_1

syysyy

認証情報取得

・APIキー
・APIシークレットキー
・アクセストークン
・アクセストークンシークレット
の4つが必要。
APIキーとAPIシークレットキーはアプリ登録時にのみ表示された(気がする)

アクセストークンとアクセストークンシークレットは、ポータルのアプリ画面から作成できる。
アクセストークンとシークレットは権限に紐づくので権限が変わったら再作成する必要あり。(Read only権限をRead write権限に変えたとき要注意)

syysyy

twitteroauthを使う
↓ドキュメント
https://twitteroauth.com/

bot tweetするなら
認証情報渡してconnection作成し、connection経由でapiを叩くだけ

## 作成
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);

## 投稿
$statues = $connection->post("statuses/update", ["status" => "hello world"]);

こんな感じで投稿された。
ダッシュボードで作成したアプリにiconや名前を登録する箇所があったので、アプリのtwitterアカウントで投稿されると思っていたが、自分のアカウントに投稿された。
何らかのbotアカウントでtweetする場合は、自分のアカウントで申請するのではなく、予め作成したbotアカウントで申請する必要があるのかな。

syysyy

権限変更時の注意

最初アプリの権限がREADオンリーになっていた。
phpからtweetしたときにエラーが発生した

↓管理者ポータルから権限をRead -> Read Writeに変更したが、しばらく待って最tweetしてもエラーが変わらなかった。

アクセストークン, シークレットは権限に紐付いているので権限変更時はアクセストークン, シークレットの再作成が必要とのこと。

参考
https://yu-report.com/entry/twitterwrite/