この記事ではPythonでLINEにメッセージや画像を送る方法と、通知失敗時の対処方法を解説します。
目次の流れで簡単にPythonでLINEにメッセージを送ることが出来ます。
LINE Notifyにログイン
まずはLINE Notifyにログインします。
トークン発行
LINEでメッセージ送信のリクエストを出す際に必要になるトークンを発行します。
右上の「マイページ」をクリックして、マイページを表示します。
「トークンを発行する」をクリックします。
「トークン名」を入力し、「トークルーム」を選択します。
「トークン名」はPythonでメッセージを送信した際に、メッセージの先頭に表示されます。(後ほどメッセージを送信したらどういうことがすぐにわかると思います。
「トークルーム」は1対1だけでなく、グループのトークルームを選択することもできます。
「トークン名」と入力し、「トークルーム」を選択すると、「発行する」ボタンがアクティブになるので、「発行する」ボタンクリックします。
発行されたトークンが表示されます。一度しか表示されないので、どこかにコピーを取っておきましょう。
これでLINE側の準備は完了です!
Pythonでメッセージ送信準備
パッケージインストール
メッセージ送信の際に必要になるrequestsというパッケージをインストールします。私はpipを使っているので、以下のようにします。pip以外のパッケージ管理ツールを使っている場合はそちらでrequestsパッケージをインストールしてください。
pip install requests
コードの準備
最後に、LINEで通知を送るためのPythonコードを書きます。
import requests
# 送信するデータの準備
token = '先ほど発行したトークン'
api_url = 'https://notify-api.line.me/api/notify'
headers = {'Authorization': f'Bearer {token}'}
message = 'ここにメッセージを書く'
data = {'message': message}
# 画像を送信する場合画像データを用意
# files = {'imageFile': open('画像のパス', 'rb')}
# メッセージだけ送信
res = requests.post(api_url, headers=headers, data=data)
# メッセージと画像を送信
# res = requests.post(api_url, headers=headers, data=data, files=files)
# 送信結果を表示
print(res.status_code, res.json()['message'])
簡単にコードの解説をします。1行目でインストールしたパッケージをインポートします。4~9行目で、トークンや、実際に送信するメッセージ、リクエスト送信先のURLなど、リクエストを出す際に必要になるデータを準備します。13行目で実際にデータを送信し、LINEにメッセージを送ります。
画像を送信する場合には11行目と、16行目をコメントを外して、画像のパスをセットします。こうすると、メッセージだけでなく、画像も送ることが出来ます。
19行目でレスポンスのステータスコードと、メッセージを表示しています。こうすることで、メッセージが送信できたかどうか、送信できなかった場合の原因を特定しやすくなります。ちなみに成功した場合は「200 ok」と表示されました。(メッセージの部分は変更されるかも)
実際に送信してみる
私は画像も一緒に送信したいので、11行目と15行目のコメントを外し、画像のパスを書きました。Pythonファイルと同じパスに「test.png」という画像を置いたので、パスは「test.png」となります。
import requests
# 送信するデータの準備
token = '先ほど発行したトークン'
api_url = 'https://notify-api.line.me/api/notify'
headers = {'Authorization': f'Bearer {token}'}
message = 'Hello World!'
data = {'message': message}
# 画像を送信する場合画像データを用意
files = {'imageFile': open('test.png', 'rb')}
# メッセージだけ送信
# res = requests.post(api_url, headers=headers, data=data)
# メッセージと画像を送信
res = requests.post(api_url, headers=headers, data=data, files=files)
# 送信結果を表示
print(res.status_code, res.json()['message'])
ファイル名をmain.pyとしたので、以下のようにして実行します。
python main.py
成功すれば「200 ok」と表示され、LINEに通知が来るはずです。
通知に失敗した場合の対処法
基本的に、最終行で行っているprint(res.status_code, res.json()[‘message’])の内容を見て対応します。メッセージの内容にエラーの具体的な内容が書かれています。
200が表示された場合
「200 ok」と表示されたにも関わらず、通知がいかなかった場合は「LINE Notify」をブロックしている可能性があります。実際私も最初は「200 ok」が表示されたいたのに、通知が行きませんでした。ブロックリストに「LINE Notify」があったので、ブロックを解除したら通知されるようになりました。
400が表示された場合
必要なデータが送信されていないときに表示されます。messegeは必須なので、messageを送信しているか確認しましょう。
401が表示された場合
発行したトークンが不正な場合や、トークン自体が送信されていない場合に表示されます。トークンが送信されているかプログラムを見直し、正しいトークンを設定しましょう。
500が表示された場合
サーバー側のエラーなので、少し時間をおいてもう一度実行してみましょう。サーバー側のエラーが解消されて、正常に通知できるかもしれません。
今度はspread sheetと今回のPython×LINEを組み合わせて、株価が指定した値段より低くなったら、LINEに通知を飛ばすプログラムを書いてみようと思います。