4
7

More than 3 years have passed since last update.

pythonでHerokuを使ってTwitterで特定ワードが呟かれたらSlack通知する

Last updated at Posted at 2019-11-23

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の共有が無くなります。

■ 導入手順

  1. Twitter APIのアカウント作成。
  2. Herokuのアカウント作成し、インスタンスを追加。
  3. SlackでWebhookの設定。
  4. 僕のリポジトリからgit cloneする。
  5. config.pyファイルの追加。
  6. Herokuにデプロイ。
  7. 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

これで設定はおしまいです。
他にちょっとした設定を変えたいなどは、少しずつチューニングいただければと思います。

4
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7