PythonでLINEにメッセージや画像を送りたい時に、毎回検索しているのでここにまとめておきます。
プログラムの完了通知をLINEに送りたい/センサーの値を監視していて、特定の値になったらその通知をLINEに送りたいなどで使えるかと思います。
開発環境について
$wmic os get caption >Microsoft Windows 10 Pro $wmic os get osarchitecture >64ビット $python -V Python 3.7.6
目次
1.LINE Notifyのトークン取得
パーソナルアクセストークンを利用することで、Webサービスの登録をせずに通知を設定することができるようです。
詳細は以下公式ページを参考にしてください。
LINE Notify
1.1 LINEのマイページにアクセスする
上記公式ページにアクセスして、自身のLINEアカウントにログイン後、マイページをクリックする。
2.LINE通知機能を実装
2.1 必要なモジュールをインストールする
以下コードを実行。
$pip install requests
2.2 LINEに通知
以下コードを実行する。
LINEにメッセージを送れます。
import requests def main(): message = ""#ここにメッセージを入力 send_line_notify('message') def send_line_notify(message): """ LINEに通知する """ url = "https://notify-api.line.me/api/notify" token = "" #ここにトークンを入力 headers = {"Authorization" : "Bearer "+ token} headers = {'Authorization': f'Bearer {token}'} payload = {"message" : message} requests.post(url, headers = headers, params=payload, files=files) if __name__ == "__main__": main()
+αサンプルコード
Rasberry Piにて、Rasberry Pi Cameraで写真を撮ってLINEに画像とメッセージを送るPythonコードです。
from picamera import PiCamera from time import sleep import subprocess, os, sys, re from datetime import datetime import time import requests import os import subprocess from base_camera import BaseCamera def camera(): now = datetime.now() dir_path = '/home/pi/smart/image/' file_name= now.strftime('%Y%m%d%_H') + '.jpg' fname = dir_path + file_name try: os.mkdir(dir_path) except OSError: print('Date dir already exists') #os.system('raspistill -w 480 -h 360 -o ' + fname) camera = PiCamera() camera.resolution = (600, 400) camera.framerate = 15 camera.start_preview(alpha=200) sleep(4) camera.capture(fname) camera.stop_preview() return fname def line(fname): url = "https://notify-api.line.me/api/notify" token = "" #ここにトークンを入力 headers = {"Authorization" : "Bearer "+ token} message = "写真を撮りました!" payload = {"message" : message} files = {"imageFile": open(fname, "rb")} r = requests.post(url, headers = headers, params=payload, files=files) print(r.text) def main(image=""): if image == "": call_alexa() sleep(5) fname = camera() else: fname = image if fname: line(fname) if __name__ == '__main__': main()
通知画像とメッセージ
まとめ
今回はPythonでLINEに通知する方法をまとめました。
LINEは、普段から使うタイミングが多いと思うので、通知するには良いですね。