Tweepyでたこ焼きbotを作った - 概要 -
こんにちは。mokoです。
たこ焼きの数、具材、味をランダムに選んで値段とカロリー(推定)を計算し、ツイートするbotをPythonで作った話です。
クオリティはかなり低いです...。「pythonでこんな書き方するなよ。」とか「説明雑いな。絶対こいつよくわかってないだろ。」とか思われる方も多いかと...。もしコードや設定方法に不備や改善点があったら教えて頂けると嬉しいです。
- 動機 -
動機はあまり覚えていません。
何故か唐突にbotを作りたくなりました。
以上です。
- 作り方 -
ざっくりと説明すると、
- bot用のアカウントを取得し、Twitter Application ManagementでTwitter Applicationを作る。
- Twitter API KeyとAccess Tokenを登録する。
- botへツイートするコードを書く。私はpythonで書きました。
- Twitter API KeyとAccess Tokenの認証を頑張る。
- 頑張って動かす。
という感じです。
- bot用のアカウントを取得し、Twitter Applicationを作る -
最初、自分の普通に使っているアカウント(Tweets with replies by 🐙моко🐙 (@e28880AIe28883) | Twitter)の方でTwitter Applicationを作っており、何回認証してもbotからツイートできないという罠にハマっていました...。bot用アカウントを取得し、そっちの方でTwitter Applicationを作るとすんなりツイートできるようになりました。こんな初歩的なミスに付き合ってくださったフォロワー様ありがとうございました...。
bot用アカウントのメールアドレスにはGmailのエイリアス機能を使いました。これ便利。
Twitter Applicationの作り方はこんな感じです。
- Twitter API KeyとAccess Tokenを登録する -
この記事を参考にさせて頂きました。
手順をいい感じに分けれず、上の記事と微妙に内容が被っているので両方参考にしながら見て頂けるとわかりやすいかと思います。
ところで、API Keyの取得には電話番号の認証が必要らしく、私は本垢の認証を1度切り、botをその番号で認証し、API Key取得後本垢に電話番号を認証し直しました。
- botへツイートするコードを書く -
4の倍数の時刻にたこ焼きの数、具、味などをランダムに選んで値段、カロリーを計算してツイートする機能と、FFの方の「たこ焼きガチャ」という呟きに反応してたこ焼きをランダムにリプする機能を実装しました。ほぼ競プロ以外でコードを書いたことがない + Pythonの使い方をよく知らないのでファイル入出力や変数の扱いが地味に難しかったです。
githubに上げたコードです。
clock.pyがメイン(?)のプログラムで、clock.pyで他のコードをimportしている形です。普段動かしているのはclock.pyです。
コードの詳しい説明はここで書くと長くなりそうなので、別の記事にしようと思います。
- Twitter API KeyとAccess Tokenの認証を頑張る -
やったーとりあえずなんとなくコード書けたぞー。ということでコードをGithubに上げました。が、、、Twitter API KeyやAccess Keyなんかをそのままコードに埋め込んだまま上げてしまったのですね。危ない危ない。すぐ消しましたw
ちょっとググッてみると、Githubで環境変数を公開せずに認証できる方法があったのでこの記事を参考にコードを書き進めます。
.envに以下を記述し、
gist92cd782120014a76fd8d93a48e879367
.gitignoreに.envを追加します。
gist877e2fcc989b2f9a667aff379fba21a2
settings.pyを作成して.envに書いた環境変数をsettings.pyの変数に代入します。
gistaedf201be615c82084db9df0696eb249
これで、settingsを他のpythonのコードでimportすれば環境変数を外には見せずに使用することができるようになりました。
この方法、もしかしたらPythonやGithubの使い手の方なら当たり前に知っていることかもしれないのですが知らなかったのでなるほどな、と思いました。
- Herokuで動かす設定をする -
コードが書けてから気づいたのですが、プログラムを常に実行し続けないといけないわけでして...。サーバーか何か借りるのにお金必要だったり、それともPCをずっと起動しておかないといけなかったりするのかな、と思ったのですがPythonの場合Herokuでいけました。
私のbotはストリーミングもしているので別ですが、定期ツイだけの場合、調べるとHeroku Schedularというものが出てくるかと思います。しかし、その機能を利用するにはクレジットカードの登録が必要で(実際にお金を請求されることは殆ど無いようですが)、それは避けたかったのでプログラムを定期実行ではなく、常時実行してプログラム内で定期ツイの関数を定期実行するようにしました。Pythonでしたらapschedulerでできるはずです。
apschedulerの使い方はこのサイトを見ました。
Advanced Python Scheduler — APScheduler 3.5.0.post13 documentation
- 完成!!! -
記事を書きながら、あれ?これだけだったっけ?となっているので少し怪しいですが、これで完成です。多分。
1つ上に貼ったリンク先に書いてあるように、コマンドラインで
と打てばbotが起動します。★の部分にはProcfileに記述した、動かしたいプロセスの名前を入れてください。私の場合はProcfileが以下のようになっていて、
gist05e4b6f42c2492afe4ab230437f711f9
動かしたいプロセスはmainなので、
となります。
- 感想 -
実はbotを作ってからこの感想を書くまでにかなりの時間が経過していて、botを作ったことに対する感想を覚えていません....。
自分の復習も兼ねてプログラムを説明する予定だった記事(書きかけ)も宜しければ見てください...書きかけですが。↓