updated on 2020-01-27
jupyterで実行するとinline上にQRコードが出てくるのでスマホなどで読みこみ、読み込んだ機体へ通知を行う。
メリット: 超簡単で手間いらず
デメリット: pipによる導入手法しかドキュメントに乗っておらず、anacondaによるインストール方法がわからず、筆者はこのサービスを使用することをやめた。また、QR一つで他の機体と接続を行うので、セキュリティには気をつけなければならない。
ブラウザの右上からピロっと通知が出現します。
$ pip install jupyternotify や $ conda install -c conda-forge jupyternotify で簡単に導入可能。
便利ではあるが、やはり筆者としてはいつでも休日や外出時でも確認できる、スマホでの通知が良い。
1.公式サイトにアクセスして、LINEのアカウントでログインし、トークンを発行
メッセージとともに、アップロードする画像を用意しておく。
何でも良いです。
ドキュメント https://notify-bot.line.me/doc/ja/
これを見るとわかりますが、いくつかやり方があります!
jupyterからcurlコマンドで、APIコール
jupyter notebookではコマンド実行時は、先頭に!をつけます
!curl -X POST -H 'Authorization: Bearer <あなたの発行したトークン>' -F 'message=モデルの学習が終了しました' \ https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}
スタンプや画像も送れます
[スタンプに関してはこちらを参照 https://devdocs.line.me/files/sticker_list.pdf ]
curl -X POST https://notify-api.line.me/api/notify \ -H 'Authorization: Bearer <あなたの発行したトークン>' \ -F 'message=インスタンスの学習が終了しました' \ -F 'imageFile=@/Users/username/Downloads/deep_learning_vm_image.png' \ -F 'stickerPackageId=2' \ -F 'stickerId=144'
筆者的には3-2-2の方が3-2-1よりおすすめです!!
[1]のやり方を紹介しています。
import requests
def PythonNotify(message, *args):
# 諸々の設定
line_notify_api = 'https://notify-api.line.me/api/notify'
line_notify_token = 'xxxxxxxxxxxxxxxxxxxxxx' #メモしておいたアクセストークンに置換
headers = {'Authorization': 'Bearer ' + line_notify_token}
# 通知メッセージ
payload = {'message': message}
# 画像を含むか否か
if len(args) == 0:
requests.post(line_notify_api, data=payload, headers=headers)
else:
# 画像
files = {"imageFile": open(args[0], "rb")}
requests.post(line_notify_api, data=payload, headers=headers, files=files)
if __name__=='__main__':
PythonNotify('通知メッセージのテスト', '/your/path/to/image')
[2]のやり方を紹介しています。
[1]よりも、こちらの方が良い気がします。理由は、親ファイルを1つ作っておけば、子ファイルから読み込んで関数をコールできるから効率的であるからです。
親ファイル ( line_notify_bot.py )
import requests class LINENotifyBot: API_URL = 'https://notify-api.line.me/api/notify' def __init__(self, access_token): self.__headers = {'Authorization': 'Bearer ' + access_token} def send( self, message, image=None, sticker_package_id=None, sticker_id=None, ): payload = { 'message': message, 'stickerPackageId': sticker_package_id, 'stickerId': sticker_id, } files = {} if image != None: files = {'imageFile': open(image, 'rb')} r = requests.post( LINENotifyBot.API_URL, headers=self.__headers, data=payload, files=files, )
(子ファイルから読み込む)
from line_notify_bot import LINENotifyBot
bot = LINENotifyBot(access_token='xxxxxxxxxxxxxx')
bot.send(
message='テストメッセージ',
image='/path/to/image', # png or jpg
sticker_package_id=1,
sticker_id=138,
)
受けつけるパラメータは以下の通りです。
より詳しい説明は、ドキュメントをみてね https://notify-bot.line.me/doc/ja/
パラメータ名 | 必須 | 型 | 説明 |
---|---|---|---|
message | 必須 | String | 最大 1000文字 |
imageThumbnail | 省略可能 | HTTP/HTTPS URL | 最大 240×240px / JPEG のみ許可されます |
imageFullsize | 省略可能 | HTTP/HTTPS URL | 最大 2048×2048px / JPEG のみ許可されます |
imageFile | 省略可能 | File | LINE上の画像サーバーにアップロードします。 imageThumbnail/imageFullsizeと同時に指定された場合は、imageFileが優先されます。 1時間にuploadできる量に制限があります。 |
stickerPackageId | 省略可能 | Number | パッケージ識別子。 Stickerの識別子は以下を参照ください。 Sticker一覧 |
stickerId | 省略可能 | Number | Sticker識別子 |
notificationDisabled | 省略可能 | Boolean | true: メッセージ送信時に、ユーザに通知されない。 false: メッセージ送信時に、ユーザに通知される。ただし、LINEで通知をオフにしている場合は通知されません。 デフォルト値は false です。 |
LINE Notify を使って、スタンプや画像、メッセージを通じて、通知する方法を紹介しました。
通知するライブラリは色々ありますが、私が知る限りではこれがNo1 ですね!
是非是非使ってくださいな。
参考文献
[1] https://kuroyagikun.com/python-line-message-picture-send/#toc1
[2] https://qiita.com/moriita/items/5b199ac6b14ceaa4f7c9