Twitter API v2で Twitter bot を作ってみる
目次
はじめに
TwitterのAPIを検索すると、tweepyを使ったツイート方法の記事が数多く見つかります。ただし、その多くはAPI v1.1を前提にしたものです。せっかくAPIを使うなら新しい仕組みで試してみたいと思い、Twitter API v2を使ってTwitter botを作成してみました。本記事では実際にbotを作成した手順を、概要レベルでまとめて紹介します。実行環境にはAWS Lambdaを利用しています。詳細な実装まで踏み込んだ内容ではありませんが、同じようにAPI v2でbotを作ってみたい方の参考になれば幸いです。
実施手順
1. Twitterのアカウントを作成する
課題:bot用のアカウントが必要になるが、新規作成すべきか迷う。
解決策:すでに利用しているアカウントをそのまま使ってもよいし、新規に作成しても構わない。
とりあえずbot用のTwitterアカウントを作成してください。今使っているアカウントでも問題ありません。新たに作成する場合、Gmailのエイリアス機能を使ってメールアドレスを用意するのがおすすめです。今後別のアカウントを作成する際にも利用できるので、覚えておくと便利です。
2. TwitterのDeveloper登録を行う
課題:APIを利用するにはDeveloper登録が必要だが、途中で申請が止まってしまうことがある。
解決策:電話番号を先にアカウントへ登録してから申請を進める。
APIを利用可能にするためには、Twitter側でDeveloper登録が必要になります。自身のアカウント・メールアドレス・電話番号で登録を進めてください。途中、登録確認のメールが届くため、受信できないメールアドレスでは登録できません。また、アカウントに電話番号が登録されていない場合は途中で登録が進められなくなるので、先に電話番号を登録しておくのがよいでしょう。
3. Keys and TokensでAPIキーを発行する
課題:APIを呼び出すための認証情報が必要。
解決策:Developer PortalのKeys and Tokensページで各種トークンを発行する。
Developer登録が終わったら、Keys and Tokensのページで各種トークンの発行を行ってください。ここで発行される以下のキーがすべて必要になります。ここで発行したキーは、絶対にパブリックな場所には保管しないでください。
- API Key
- API Key Secret
- Access Token
- Access Token Secret

4. Twitter API v2を利用したコードを作成する
課題:API v2の使い方や認証方式がわかりにくい。
解決策:Developer Portalが提供するサンプルコードとPostman環境を活用する。
Developer PortalにはAPIの利用方法がまとめられたページがあります。今回は自動フォローなどは行わず、ツイートだけ出来れば良いので、その方法を確認していきます。

Managed Tweets内のPostメソッドを利用すればよいことはわかりますが、「認証はどうやるんだろう?」となり、ページ内のRead the docsからドキュメントを読んでいくことになります。

Read the docsのリンクに飛ぶと、以下のページが表示されます。

ここでサンプルコードが提供されていて、さらにPostmanでのテスト環境も用意されていることがわかります。まずはサンプルコードから見ていきます。
サンプルコード編
Sample Codeのリンクをクリックするとgithubのサイトに飛びます。とりあえずの動作確認として、Manage TweetsのAPI利用サンプルであるcreate_tweet.pyをそのままテキストでコピーし、ローカル環境で動作させていきます。

ローカル環境にtweepy等のライブラリが入っておらず少し時間がかかりましたが、以下の通り問題なく実行できました。

無事、今回作成したアカウントで「Hello World!」のツイートも行われていました。

ただ、こちらのコードは公式サンプルというだけあって、実行途中でPINの入力を求められるなど、bot向けに使うには少しカスタマイズが必要な内容でした。コードを眺めた結果、「Postmanでやってみよう」と方針を切り替えることにしました(一般的なエンジニアの方はサンプルコードをベースにする方が扱いやすいかもしれません。今回は手軽な方法を選んでいます)。
Postman編
Postmanを利用するには、まず利用登録が必要です。少し面倒に思われるかもしれませんが、curlコマンドを組み立てる際にも役立つツールなので、入れておいて損はありません。
Twitter DeveloperのページからRun in Postmanのリンクをクリックすると、Web版のPostmanが起動します。パブリックワークスペースとして起動するため、最初にローカルのワークスペースへフォークする作業を行います。
環境が整ったら、あとはManage TweetsのCreate a Tweetのコマンドの中で、Authorizationのタブに先ほど取得した認証情報を入力すれば動作確認が可能です。

Postmanの便利なところは、動作確認をした後にPythonやNode.jsのソースコードを自動生成できる点です。以下のような形で出力されます。

こちらはPINの入力等もなく、botに利用しやすそうだったため、このコードをベースにすることにしました。
5. AWS Lambdaで定期実行環境を構築する
課題:botとして定期的にツイートする仕組みと、コストを抑えた運用方法が必要。
解決策:AWS Lambda + CloudWatch Eventsで1日1回の定期実行にする。
実行環境にはAWS Lambdaを利用しました。毎回同じ内容をツイートするだけでは味気ないため、ツイート内容にランダム性を持たせるロジックを実装したのですが、過去の実行結果を参照する必要があり、最新データをS3に格納する処理などを書いていたら、想定より時間がかかりました。
botとはいえ、あまり頻繁にツイートするとAWSの費用面も心配になるため、1日1ツイートとすることにしました。定期実行の方法としては、CloudWatch Eventsから1日1回このLambdaを実行するように設定しています。

これでbotとしての実行環境は完成です。
まとめ:Twitter API v2でbotを安全に運用するポイント
今回の記事で紹介したポイントをまとめます。
- Twitter API v2でツイートするには、事前にDeveloper登録とKeys and Tokensでのキー発行が必要
- 発行したAPI Key・Access Tokenなどは絶対に公開しない
- 公式サンプルコード(create_tweet.py)はPIN入力が必要なため、bot向けにはPostmanで生成したコードの方が扱いやすい
- AWS Lambda + CloudWatch Eventsを使えば、低コストで定期ツイートの仕組みを構築できる
作成にかかった時間はおおよそ4〜5時間で、その大半はLambdaからS3にアクセスするためのコード作成とデバッグに費やしました。この記事が、皆様の今後のbot作りに役立てば幸いです。詳細は端折っている部分も多いので、気になる点があればお気軽にお問い合わせください。
追記:Postmanで生成したコードをそのまま使っていたところ、TimeStampのエラーが出始めたため、結局githubのサンプルコードをベースに作り直しました。Postman生成コードを本番運用する場合は、この点に注意してください。







ディスカッション
コメント一覧
まだ、コメントがありません