はぎあの裏のラクガキ

自身の制作物に関することや、自分の考えなどを置いておきます

Twitter上で素数判定botを作ってみた

記事の概要

この記事では、作ったbotの機能と、botを作るために踏んだ手順をざっくりと紹介します。botを作る手順は自分向けの備忘録程度の雑さで書いてます(詳しく知りたい人は各自で調べてください)。

素数判定botについて

このbotは、リプライで送られてきた整数が素数かどうか判定し、結果を返信します。その他に、今日の日付に相当する整数(YYYYMMDD)が素数かどうかをツイートします。

動作環境

使用言語はPython 3.6.8です。サーバーはherokuのものを使用しています。

botを作るためにやったこと

1. Twitter Appの作成、各種キーの取得

botを作るためには、bot用のTwitter Appを制作する必要がありますTwitterの開発者向けサイトにアクセスしてぽちぽちするとできます。詳しくは「Twitter bot 自作」等で調べてください。

2. PythonTwitterを扱うための準備

PythonTwitterを扱うためのライブラリを手元の環境にインストールします。今回はTweepyというライブラリを使用します。コマンドライン

pip3 install tweepy

などと打つと手元の環境にTweepyがインストールされます。このbotでは、Tweepyの他にbottleAPSchedulerも使用するのでそれらもインストールします。

3. herokuの準備

今回はherokuというサービスを使用するので、herokuのアカウントを取得する必要があります。アカウントを作ったら、botを動かすための新しいアプリを作ります。やり方の詳細は割愛します。また、アプリのセッティングをするために必要なheroku CLIもインストールします。ここまでの作業が終わったら、コマンドライン

git clone (heroku Gitのurl)

と打ってレポジトリをクローンします。

4. 必要なファイル群の準備

以下のファイルを用意します。

  • runtime.txt
  • requirements.txt
  • Procfile
  • index.py
  • clock.py
  • tweet.py

runtime.txtで実際に動かすPythonのバージョンを指定します。以下のように入力します。

python-3.6.8

requirements.txtには、使用するライブラリの一覧を書きます。いちいち調べるのは面倒なので、コマンドラインに以下のように入力して作成します。

python3 freeze -l > requirements.txt

Procfileには実際に実行するコマンドを書きます。詳しい仕様についてはググってください。今回は以下のようにしました。

web: python index.py
clock: python clock.py

index.pyには、アクセスされた際に表示するダミーのページを表示するプログラムを書きます。clock.pyには定期的に実行するプログラムを書きます。tweet.pyには、実際にツイートするプログラムを書きます。これらのファイルはここ(GitHub)に上がっているので、詳しくはそちらを見てください。「これってどうやるの?」となったときは、Tweepyの公式ドキュメントでサーチをかけるとたいていやりたいことが出てきます。

5. サーバー上でプログラムを実行

1.で取得した各種キーは、サーバー上の環境変数として保存します。4つのキーについていちいち設定するのは面倒なので、.envなどと名付けたファイルにまとめて記述します。.envには以下のように入力します。

CONSUMER_KEY=(実際のconsumer key)
CONSUMER_SECRET=(実際のconsumer secret)
ACCESS_TOKEN=(実際のaccess token)
ACCESS_TOKEN_SECRET=(実際のaccess token secret)

.envが用意できたら、以下のように入力して環境変数を設定します。

heroku config:set (cat .env)

環境変数の設定が終わったら、プログラムをデプロイします。gitを用いてサーバーに上げることで、実際にサーバー上でプログラムを動かせます。以下のコマンドを1行ずつ入力してあげます。(※先程作成した.envがアップされないようにするため、.gitignoreに.envを書いてください。)

git add .
git commit -m "(ここにコミットのメッセージを入れる)"
git push

6. サーバーをアイドル状態にしないようにする

herokuの仕様上、一定期間サーバーにアクセスがないと、サーバーがアイドル状態になってしまい、botが作動しなくなってしまいます。ダミーのトップページに一定時間ごと(10分に1回とか)にアクセスすることで、アイドル状態になるのを防ぎます。Uptime Robotなどを使用することでこれを達成できます。詳細は(ry

bot制作の感想

(難易度はそこまで高くなかったとはいえ)作り上げたときの達成感はすごかったです。フォロワーの皆さんにbotで遊んでもらえたことが嬉しかったです。

今後の展望

herokuでは内部ファイルがたまに消えてしまうらしく、同じツイートにn回反応してしまうことがあるみたいなので、それをどうにかする手段を考えています。新機能の提案をしてもらえたら実装するかもです(Twitterで@hagyu_ayaにリプライしていただけると反応しやすいです)。

参考にしたサイト