定期的にLINEメッセージを送ってくれるアプリ(Bot)を作ってみた

 コミュニケーションツールのLINEを皆さんは使っているかと思います。今回はLINEを使って毎朝メッセージを送信してくれるアプリ(Bot)を作成しましたので共有します。

 私は毎朝ゴミを出す係となっていて、毎回「今日は何のゴミの日だろう?」と調べてゴミを出していました。特に何かと忙しい朝にわざわざ確認する時間がもったいないと感じておりました。毎朝今日のゴミの種類を通知してくれるアプリがあればいいなと思いました。

 そこで、今回はLINE Botを利用して毎朝決まった時間に今日のゴミ出しの種類を通知してくれる機能を作成しました。LINE DevelopersからLINE Botのアカウントを無料で作ることができます。またline-bot-sdkを利用すれば簡単にPythonでLINE API連携をすることができます。作成したPythonをWidows標準のタスクスケジューラを利用して定期的に実行させることで、LINE Botが毎朝ゴミ出しの種類を通知してくれます。

やったこと

 今回のアプリ実装にあたり行ったことは次の内容です。

  • LINE Botの作成
  • Pythonスクリプト作成(ゴミ出し判断、BotへのAPI連携)
  • Pythonスクリプトのタスクスケジュール設定(毎朝7時)

実装後のイメージは次の通りです。

Pythonスクリプトは自宅のPCに仕込んでいます。

実装環境

OS:Windows 10 Pro 64bit

バージョン:20H2

メモリ:16GB

CPU:Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 3.19 GHz

LINE Bot作成

※LINE Botのアカウントを既に持っている方は飛ばしていただいて構いません。

 まずはLINEに通知を送ってくれるチャットボットを作成する必要があります。LINE Developersにアクセスしてアカウントを作ります。LINE DevelopersにアクセスしてLINE Botのアカウントを作成します。アカウント名やメールアドレスなどは適宜入力してください。作成が終わると次のようにQRコードが作成されますので、友達登録をすることができます。

 Botが完成したので、さっそくPythonを書いていきますが、事前にAPI連携で必要な情報をメモしておきます。LINE Bot作成後に「Channel Access Token」を発行する必要があります。発行されたトークンを利用することでLINEのAPI連携の認証を行うことができます。「Messaging API」のタブからトークンを発行することができます。発行される適当な文字列が表示されますので、メモをしておきましょう。

Pythonスクリプト作成

 次にPythonを利用してLINE API連携を行いメッセージを送るプログラムを作成します。

まずは結果のソースコードからです。

#push_trash_msg.py

import json
#LINE API連携のモジュールをインポートする
from linebot import LineBotApi
from linebot.models import TextSendMessage

#info.jsonに記載されているLINEのAccess Token, User IDを参照する
file = open('info.json','r')
info = json.load(file)

CHANNEL_ACCESS_TOKEN = info['CHANNEL_ACCESS_TOKEN']
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
USER_ID = info['USER_ID']

def main():
    #trash.jsonに記載されているゴミ出し情報を参照する
    file2 = open('trash.json','r')
    info2 = json.load(file2)

    #Python実行時に日にちを取得する
    from datetime import datetime as dt
    tdatetime = dt.now()
    tstr = tdatetime.strftime('%Y-%m-%d')
        
  #今日の日付に紐づくゴミ出しの種類を判定しメッセージを送る
    if info2[tstr] == "1":
        messages = TextSendMessage(text="燃えるごみです")
    elif info2[tstr] == "2":
        messages = TextSendMessage(text="プラです")
    elif info2[tstr] == "3":
        messages = TextSendMessage(text="ペットボトルです")
    elif info2[tstr] == "4":
        messages = TextSendMessage(text="ビン缶です")
    elif info2[tstr] == "5":
        messages = TextSendMessage(text="紙布です")
    elif info2[tstr] == "6":
        messages = TextSendMessage(text="不燃です")
    else:
        messages = TextSendMessage(text="本日はなし")
    
    line_bot_api.broadcast(messages=messages)

if __name__=="__main__":
    main()

次にLINEの認証情報が書かれたinfo.jsonとゴミ出しの情報が記載されたtrash.jsonの内容です。

#info.json
{
    "CHANNEL_ACCESS_TOKEN":"xxxxxxxx",
    "USER_ID":"xxxxxxx"
}
#trash.json
{   
    "2022-02-06":"7",
    "2022-02-07":"1",
    #略  
}

info.jsonの「CHANNEL_ACCESS_TOKEN」と「USER_ID」は先ほど確認したLINE Developersの情報をコピペします。

trash.jsonは日付と対応するゴミ出しの種類を記述します。

ソースコードのポイント

5~6行:LINE APIのモジュールは既に用意されておりますのでこちらを利用します。

12~13行:LineBotApi(CHANNEL_ACCESS_TOKEN)により認証を行います。

22~24行:当日の日付情報を取得します。取得した時の型をstring型に変換することでtrash.json内の文字列と比較できます。

27~40行:比較結果からLINEに送信する文字列を決定します。

42行:チャットボットが友達全員にメッセージを送信します。(ブロードキャスト)

ソースコードの説明は以上です。なおLINE APIのモジュールは事前にline-bot-sdkを端末にインストールしておく必要があります。インストールコマンドは次の通り。

$pip3 install line-bot-sdk

Pythonスクリプトのタスクスケジューラ設定

 ここまでチャットボットに当日のゴミ出しについてメッセージを送信する仕組みを作成しました。では次にこの処理を定期的に実行させるためのスケジューリングを行います。

 今回はWindows標準で搭載されているタスクスケジューラを利用して毎朝7時にPythonを実行するようにさせます。まずPythonを実行させるバッチファイルを作成します。以下はサンプルのコードです。

#push_trash_msg.bat
cd C:\directory\hoge
python C:\directory\hoge\push_trash_msg.py

このバッチファイルをタスクスケジューラに登録します。タスクスケジューラを起動してタスクスケジューラライブラリを右クリックし「新規タスク作成」を行います。

次に起動するトリガー(時間)と操作(bat実行)を設定します。設定内容は次の通りです。左図が時間トリガーの設定で毎朝7時に実行する条件となっています。右図はトリガーの条件に合致した時に操作する内容です。ここでは「push_trash_msg.py」を実行する例を記載しています。

これで毎朝7時にスクリプトが実行されてLINE Botが当日のゴミ出しの種類を通知してくれるようになります。

まとめ

今回はLINE Developersから無料で簡単に利用できるチャットボットを作成しました。また毎朝ゴミ出しの種類を教えてくれるプログラムをPythonで書きました。LINE API機能を利用することに簡単にPythonの結果をチャットボットのメッセージに載せて通知することができました。

コメント

タイトルとURLをコピーしました