DjangoBrothers BLOG ✍️

2020/10/30

このエントリーをはてなブックマークに追加
Python デプロイ Heroku LINE API

【Python】Line notifyのAPIを使ってメッセージ送信する方法! 定期通知の設定まで解説

PythonでLINE Notifyを使ってメッセージをLINEに通知する方法です。

Herokuのスケジューラー機能を使って、定期通知する設定まで解説します。

開発者用のドキュメントはこちらです。

トークンを取得する

まずは、トークンを取得する必要があります。

マイページにアクセスして、「トークンを発行する」ボタンから通知先のトークルームを選択します。

発行されたトークンはコピーして保存しておきます。

トークンが発行されると、「連携中サービス」の一覧に追加されます。

メッセージを送信する

Pythonのrequestsライブラリを使ってAPIを叩きます。

pipでrequestsライブラリをインストール

$ pip3 intall requests

LINEへの通知

import requests


# 発行されたトークン
ACCESS_TOKEN = "BaLqLzy7gS6mXlKebtpO03TTz1u1BeXODUS6ad024sI"

headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}

data = {
    "message": "こんにちは!\nLINE Notifyを使ってメッセージを送ってみたよ!"
}

requests.post(
    "https://notify-api.line.me/api/notify",
    headers=headers,
    data=data,
)

ヘッダーには、Authorization": Bearer <発行されたアクセストークン>を指定します。

data(リクエストパラメータ)の、messageには通知したいメッセージを指定します。messageパラメータは必須項目なので必ず指定する必要があります。オプション項目として画像などを送ることもできます。詳しくは公式ドキュメントの「通知系」を参照してください。

上記のPythonファイルを実行すると、LINEにメッセージが送信されます。

Herokuにデプロイして、定期通知する

LINEへの通知が確認できたら、定期的に自動通知される設定をしてみましょう。

例えばですが、ランダムで掃除当番を選定して通知するようなコードは以下のようになります。

~/line_notify/notify_cleaner.py

import requests
import random

print("notify_cleaner.pyを実行開始")

# 実際は、環境変数からトークンの値を取得するなどの対策をした方が良いです。
ACCESS_TOKEN = "BaLqLzy7gS6mXlKebtpO03TTz1u1BeXODUS6ad024sI"

# その日の掃除当番をランダムで選ぶ
cleaners = ["藤井", "羽生", "加藤"]
cleaner = random.choice(cleaners)

headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}

message = f"""
おはようございます!
今日のお掃除当番は{cleaner}さんです。
よろしくね😊
"""

data = {
    "message": message
}

requests.post(
    "https://notify-api.line.me/api/notify",
    headers=headers,
    data=data,
)

print("notify_cleaner.pyを実行終了")

イメージはこんな感じ。

これを毎朝9:00に通知する設定をしてみたいと思います。

まずは、ソースコードをHerokuにデプロイします。PythonアプリをHerokuにデプロイする方法は、こちらに詳しくまとめています。Herokuを初めて使う方はリンク先の記事で紹介している初期設定などが必要になります。

今回は、line_notify というディレクトリの中に、notify_cleaner.pyがあるという前提です。

まずは、requirements.txtruntime.txtを作ります。

requirements.txtには、使用するライブラリを書きます。今回はrequestsだけで十分です。

~/line_notify/requirements.txt

requests==2.24.0

runtime.txtには使用するPythonのバージョンを書きます。

~/line_notify/runtime.txt

python-3.6.6

次にgit initしてリポジトリを作ります。

リポジトリを作る

~/line_notify $ git init

ここまでの変更内容をコミットします。

コミットする

~/line_notify $ git add -A
~/line_notify $ git commit -m "掃除当番を通知する処理を追加"

デプロイするために、heroku createコマンドとgit push heroku masterコマンドを打ちます。

Herokuにデプロイ

~/line_notify $ heroku create
~/line_notify $ git push heroku master

ここまでで、ソースコードをHerokuのサーバーにデプロイすることができているはずです。

Herokuのサーバー上でコマンドを実行するにはheroku runの後に実行したいコマンドを打ちます。

Herokuで処理を実行

$ heroku run python notify_cleaner.py
notify_cleaner.pyを実行開始
notify_cleaner.pyを実行終了

print文の内容がコンソールに出力され、LINEにメッセージが届いていればデプロイはOKです。

あとは、定期的にこのpython notify_cleaner.pyコマンドが実行される設定をします。

今回はHeroku Schedulerというものを使います。

HerokuのResourcesタブを開き、Add-onsの検索フォームで「heroku scheduler」と入力して追加します。

Heroku Schedulerをインストールできたら、「Create job」ボタンからスケジュールの設定をします。

以下画像のように、スケジュールと実行したいコマンドを設定すると、定期的に通知が飛んでくるはずです。時間指定の場合タイムゾーンはUTCが使われるので、日本時間と9時間の差がある点に注意してください。

もし飛んでこない場合は、heroku logs --tailコマンドでログを確認してみましょう。