X(Twitter) API を使用して、投稿データ用の JSON から定期的に自動投稿する Python スクリプトを書いてみた

外部 URL に設置した投稿データ用の JSON ファイルから投稿内容を取得し、X (Twitter) API v2 を使用して、X に投稿する Python スクリプトを書いてみたというお話。GitHub Actions を組み合わせることで、決められた時間になると定期的に X に投稿する仕組みを作れます。

タイトルのままなんですけども、外部 URL に設置した、投稿データをまとめた JSON を取得し、X(Twitter) に対して投稿する Python スクリプトを書いてみたので共有。

このスクリプトと GitHub Actions を組み合わせて、JSON で作った投稿リストから、決められた時間になると定期的に X(Twitter) に投稿する仕組みを作れます。

もともと、自分の会社の X(Twitter) アカウント (@burnworksInc) がほぼ放置状態なのはいかんなと思いつつも、投稿するネタもないし人間がやるのも面倒くせぇって思ってたところで、少ないとはいえ、昔から書いてる過去コラムみたいなコンテンツも程度は溜まっているし、これを再利用しようというところが話の始まり。

投稿したいリストをどこかに置いておいて、そこから定期的に何かしらのプログラムを実行して X(Twitter) に投稿する仕組み (Bot) を作ればいいかって考えたときに、最初に思いついた、というか仕組み的に簡単で、管理が楽そうだなと思ったのが GitHub Actions を使った方法でした。

最初は、Node.js というか、JavaScript で書こうかなと思ったんですけども、X(Twitter) API 触るの久しぶりだし、とりあえず使えそうなライブラリでも確認しようと X(Twitter) API v2 のドキュメントを見てたら、Python のライブラリに tweepy (下記リンク参照) って便利そうなライブラリがありまして......

個人的にあまり Python って書いたことないし、勉強がてらにいいかなと思って、これを使用して書いてみることにしました。

実際に会社の公式アカウントの方で運用を始めて、しばらく様子を見ていましたが、特に不具合もなさそうなので今回共有した次第です。

使い方

基本的な使い方はリポジトリの README.md を読んでもらえればわかると思いますのでそちらをご確認ください。

X(Twitter) API の認証情報取得や、投稿対象となるアカウントへのアプリ連携さえ終われば半分は終わり。

あとはリポジトリを clone して、各環境変数を GitHub のリポジトリ設定から行い、投稿用の JSON ファイルを外部からアクセス可能な URL に設置します。

最後に、サンプルとしておいてある .github/workflows/auto_post.yml.sampleauto_post.yml にリネームし、GitHub Actions を有効にすれば指定のタイミングで Python スクリプトが実行され、投稿が行われると思います。

基本動作としては、投稿用 JSON にある投稿データの中から 1 つをランダムに選択し、投稿したら、その投稿が短期間で重複投稿されないように投稿履歴にハッシュ値を保存していきます。

投稿が進んでいって、投稿履歴を確認したときに、一周したなと判断 (要するに投稿用 JSON の内容と、保存してある投稿履歴のハッシュ値が全部重複) した場合は、一旦投稿履歴をリセットしてから投稿をします (つまり二周目突入)。

なので、投稿用 JSON に数十件のデータがあれば、週 1 回投稿程度の頻度なら数ヶ月から 1 年程度は重複せずに自動投稿できるということになります。

ちなみに、サンプルの auto_post.yml は、週 1 回、月曜日の 10:30 (日本時間) にスクリプトが実行される設定にしてありますが、設定次第で毎日 1 回でも、月に 1 回でも調整可能です。GitHub の cron はタイムゾーンの指定ができず、問答無用の、UTC (協定世界時) で動作しますので日本時間にする場合は、動作させたい日本時間から -9 時間しましょう。

ただし、GitHub Actions の cron はその時の GitHub 側のリソース状況などによって、正確にその時間に実行されるとは限らないので、厳密な投稿時間管理には向きません。まぁ自動投稿なんてそんな厳密にやる必要もないと思いますから、通常の運用では問題にならないと思いますが念のため。

関連エントリー

記事をここまで御覧頂きありがとうございます。
この記事が気に入ったらサポートしてみませんか?