とあるお兄さんの雑記

基本的に技術系の内容を書きますが、何を書くかは私の気分です。

LINEのMessaging APIを使ってゴミ出しを通知する

前回、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.pyrequirements.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に近い感じです。

developers.line.biz

チャンネルの作成から設定まで

qiita.com

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にします。

ここらの設定は下記の記事も参考にするとわかりやすいです。

qiita.com

取得したユーザーIDとチャンネルアクセストークンはmain.pyにそれぞれ設定します。

CHANNEL_ACCESS_TOKEN = "YOUR_CHANNEL_ACCESS_TOKEN"
USER_ID = "YOUR_USER_ID"

これで準備は完了です。あとはHeroku側にgit pushすればOKです。

参考記事

1時間でWikipedia検索できるLINE BOTをサクッと作ってみよう! #Python - Qiita

【Python】定期実行するLineBotを作成する #Python - Qiita