本ページではPython3を使ってLINEのメッセージを送信する方法を紹介します。
前提
LINEにメッセージを送るにはトークンが必要です。トークンはLINE Notifyというサイトから取得できます。
トークンは一つのIDにつき、一つのトークンしか発行できません。
LINE Notify
LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。
取得の流れ
- 上記サイトの画面右上にある「ログイン」からLINEのパスワードを使ってログインします。
- ログイン後、また画面右上にある自分の名前のプルメニュー内にある「マイページ」をクリックします。
- 表示されたページの下部にある「トークンを発行」をクリックします。
- 「トークン名」を入力し、「グループ」を選択して「発行」をクリックします。
トークン名は送信されるメッセージの頭に表示されます。 - 発行されたトークンをコピーします。失わないように大切に保管しましょう。
ライブラリ
LINEにメッセージを送るにはimport requests
というライブラリを使用します。標準ではないのでインストールが必要です。
pip install requests
基本
以下だけで送信できます。
message
:送信したいメッセージを設定します。access_token:LINE
で取得したトークンを設定します。
import requests message = "LINEを送信します" access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX' url = "https://notify-api.line.me/api/notify" headers = {'Authorization': 'Bearer ' + access_token} payload = {'message': message} requests.post(url, headers=headers, params=payload,)
応用
送信されたか確認、送信されるまで続けるという仕組みを実装しました。
import requests from time import sleep message = "LINEを送信します" access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX' url = "https://notify-api.line.me/api/notify" headers = {'Authorization': 'Bearer ' + access_token} while True: try: payload = {'message': message} res = requests.post(url, headers=headers, params=payload,) if res.text == '{"status":200,"message":"ok"}': break except Exception as e: print ('type:' + str(type(e))) sleep(1)
その他
画像を送信
requests.post
にfiles
を追加するだけです。メッセージが空の場合は400のエラーになって送信されないので注意してください。
import requests message = "LINEを送信します" images = "sample.png" access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX' url = "https://notify-api.line.me/api/notify" headers = {'Authorization': 'Bearer ' + access_token} payload = {'message': message} files = {'imageFile': open(images, 'rb')} requests.post(url, headers=headers, params=payload, files=files,)
スタンプを送信
payload
にstickerPackageId
とstickerId
を設定します。stickerPackageId
とstickerId
は以下より取得してください。特殊なスタンプの送信やIDなどはわかりません。。。
https://devdocs.line.me/files/sticker_list.pdf
import requests message = "LINEを送信します" stickerPackageId = 13 stickerId = 1 access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX' url = "https://notify-api.line.me/api/notify" headers = {'Authorization': 'Bearer ' + access_token} payload = {'message': message, 'stickerPackageId': 1, 'stickerId': 13,} requests.post(url, headers=headers, params=payload,)
コメント