2019年11月23日に記載した記事です。
こんにちは。 @kosukeobataです。
最近はPdMやマーケターという肩書きが多いのですが、エンジニアリングも再開したので、ちょっとばかし投稿してみます。
今回は特定のワードがTwitterで呟かれたら、Slack通知するBOTの作り方について記載します。
GitHubであまり綺麗とは言えないですが、ソースコードを公開しているので、そちらを参照しながら作っていただけるかなと思います。
https://github.com/kosukeobata/twitter-bot
■ 要件
- 特定のワードがTwitterに投稿されたら、Slack通知されること。
- 重複したツイートidのツイートは通知されないこと。
- リアルタイムでの通知ではなくてよい。
■ 技術周り
- python
- sqlite3
- Heroku
- Twitter API
- SlackのWebhook
■ やっていること
HerokuのSchedularというアドオンを用いて、10分に一度Twitterに検索をかけます。
引っかかる投稿があれば、指定した特定のSlackに通知してくれます。
その際に、取得したツイートの中でもっとも大きいツイートIDをsqlite3に保存します。
次回実行時に保存されたIDより大きいツイートのみを検索しにいくことで、重複したツイートIDの共有が無くなります。
■ 導入手順
- Twitter APIのアカウント作成。
- Herokuのアカウント作成し、インスタンスを追加。
- SlackでWebhookの設定。
- 僕のリポジトリからgit cloneする。
- config.pyファイルの追加。
- Herokuにデプロイ。
- HerokuにSchedulerを追加。
1. Twitter APIのアカウント作成
https://developer.twitter.com/ から登録し、利用申請を行います。
申請から承認までは時間がかかりますので、ご注意ください。
詳細はこちらのQiitaを参照してください。
Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報
2. Herokuアカウント作成
https://jp.heroku.com/ から登録する。
特に難しいことはないので、すんなり行えると思います。
アカウントが作成できたらインスタンスを作成しましょう。
この記事では、例えばインスタンス名を「qiita-katsuo」として、進めます。
なので、この記事中に出てくるqiita-katsuoの箇所に関しては、ご自身でつけられた名前があると思うので、全てその名前に置換して読み進めてください。
3. SlackのWebhookの設定
こちらも色んなQiitaの記事があるので、そちらを参照ください。
SlackのIncoming Webhooksを使い倒す
「https://hooks.slack.com/services/ 」から始まるURLが取得できたら完了です。
4. git clone
作業したいディレクトリに移動し、git cloneしてください。
$ git clone git@github.com:kosukeobata/twitter-bot.git
5. config.pyファイルの追加
アクセストークンなどを記載するファイルなので、GitHub上にはアップロードしていません。
ご自身でファイルを追加してください。
以下のようなファイルになっていればokです。
- 上から4つはTwitter APIの設定。
- WEB_HOOK_KEYはSlackのWebhookの設定。
- SEARCH_KEYWORDはTwitterで呟かれたらpostしたいキーワードを指定してください。
- CHANNEL_NAMEはSlackで通知したいチャンネル名を指定してください。
CONSUMER_KEY = "*********"
CONSUMER_SECRET = "*********"
ACCESS_TOKEN = "*********"
ACCESS_TOKEN_SECRET = "*********"
WEB_HOOK_KEY = "*********"
SEARCH_KEYWORD = "*********"
CHANNEL_NAME = "#*********"
この時点でlocalで実行することができます。
localでテストをしたい方は、まずは以下のコマンドを実行し、localでの環境を整えてください。
pipのインストール
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py --user
$ export PATH="$HOME/Library/Python/2.7/bin:$PATH"
$ echo 'export PATH="$HOME/Library/Python/2.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
requestのインストール
$ pip install requests requests_oauthlib --user
実行
$ python get_twitter_data.py
6. Herokuにデプロイ
2の手順で作成したインスタンスに対してデプロイします。
まずはターミナルでlogin認証を行い、そしてインスタンスを紐づけ、そしてherokuにpushします。
$ heroku login
$ git init
$ heroku git:remote -a qiita-katsuo
$ git add .
$ git commit -am "make it better"
$ git push heroku master
7. HerokuにSchedularを登録。
Schedularのアドオンを利用すれば、10分に一度Twitterに検索をかけにいってくれます。
リアルタイムではないですが、それくらいの頻度なら問題ないかと思います。
まず、ターミナルで以下のコマンドを叩いてアドオンを追加します。
$ heroku addons:create scheduler:standard --app qiita-katsuo
そうすると、herokuの画面からスケジュールを登録できます。
https://dashboard.heroku.com/apps/qiita-katsuo/scheduler
指定するJobとして以下のコマンドを指定してください。
$ python get_twitter_data.py
これで設定はおしまいです。
他にちょっとした設定を変えたいなどは、少しずつチューニングいただければと思います。