PythonでLINEにメッセージを送る方法を解説 ~通知失敗時の対応方法も~

Python
この記事は約6分で読めます。

この記事では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が表示された場合

サーバー側のエラーなので、少し時間をおいてもう一度実行してみましょう。サーバー側のエラーが解消されて、正常に通知できるかもしれません。

参照:LINE Notify API Document

今度はspread sheetと今回のPython×LINEを組み合わせて、株価が指定した値段より低くなったら、LINEに通知を飛ばすプログラムを書いてみようと思います。

おすすめ書籍

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