前回、LINE Notifyを経由して明日のゴミ出しを通知するものを作りました。が、このLINE Notifyの通知がダサい。
というわけで、もっと発展してLINE のMessagingAPIを使ってゴミ出しを通知するbotを作成しました(改修です)。
環境
macOS Big Sur Python 3.9.6 pytest 6.2.2 LINE Messaging API line-bot-sdk 1.20.0 Heroku
ソースコード概要
NotificationGomidashi/ ├── Application │ ├── __init__.py │ ├── entity │ │ ├── __init__.py │ │ ├── calendar_entity.py │ │ └── garbage_removal_entity.py │ ├── main.py │ └── service │ ├── __init__.py │ └── notify_service.py ├── Procfile ├── docker │ ├── Dockerfile │ └── docker-compose.yml ├── requirements.txt ├── runtime.txt └── tests ├── __init__.py ├── entity │ ├── __init__.py │ ├── test_Calendar.py │ └── test_garbage_removal.py └── service └── __init__.py
変わったところといえば、main.py
とrequirements.txt
です。他のファイルに関しては過去の記事を参照ください。
main.pyについて
#coding:UTF-8 from service.notify_service import NotifyService as sv from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( MessageEvent, TextMessage, TextSendMessage, ) import os CHANNEL_ACCESS_TOKEN = "YOUR_CHANNEL_ACCESS_TOKEN" USER_ID = "YOUR_USER_ID" line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN) def main(message): pushText = TextSendMessage(text=message) line_bot_api.push_message(USER_ID, messages=pushText) if __name__ == '__main__': sv = sv() n_th_week, week_day = sv.get_time() message = '明日は、第' + str(n_th_week) + week_day + '曜日\n' + sv.get_judge_case(n_th_week, week_day) main(message) # herokuにデプロイしたものをローカルから動かしたい時 # heroku run python Application/main.py
requirements.txtについて
requests==2.25.1 line-bot-sdk==1.20.0
今回はLINE Messaging APIを使うので、line-bot-sdk
を追加します。
LINE Messaging APIについて
下記の公式ページにも書かれてはいるのですが、LINE Messaging APIというのは、ユーザー側からメッセージを送信したり、テキストを取得することができます。LINE Notifyと違い、個別のチャンネルでメッセージを送受信できます。イメージは公式LINEに近い感じです。
チャンネルの作成から設定まで
Messaging APIからチャンネルを新しく作成したら、ユーザーIDとチャンネルアクセストークンを取得します。
ユーザーIDはチャンネル基本設定のあなたのユーザーIDから、チャンネルアクセストークンはMessaging API設定のチャンネルアクセストークンから取得します。
また、Messaging API設定のWebhook設定をいじります。
Webhook URLは
https://アプリ名.herokuapp.com/callback
とします。ここのアプリ名はHerokuでgarbage-notify
としているので、
https://garbage-notify.herokuapp.com/callback
とします。
また、下のWebhookの利用をONにします。
ここらの設定は下記の記事も参考にするとわかりやすいです。
取得したユーザーIDとチャンネルアクセストークンはmain.py
にそれぞれ設定します。
CHANNEL_ACCESS_TOKEN = "YOUR_CHANNEL_ACCESS_TOKEN" USER_ID = "YOUR_USER_ID"
これで準備は完了です。あとはHeroku側にgit push
すればOKです。