LINE Notify

Pythonで定期的にLINE Notifyへ通知送る-Python

Python Article

Pythonを少し使えるようになった!何か身の回りで使えそうなものを作りたい!今回はそういった方向けに、Pythonで定期的にLINE Notifyへ通知を送る方法を紹介します。

今回必要なもの

今回実装するのに必要なものです。

  • LINEのアカウント
  • Pythonが動く環境
  • 定期的に実行できる環境(今回はcronを使います)

今回はcronを使って定期的に実行を行います。それに伴ってWindowsユーザーにはWSL(Windows Subsystem for Linux )のインストールを行っていただく必要があります。WindowsでPython環境をお使いの方は、そちらでは動かさないのでご注意ください。

Windows 10 用 Windows Subsystem for Linux のインストール ガイド

Windowsで環境を極力汚さずにPythonを動かす方法 (WSL利用 Windows10, version 1607以降限定)

Pythonの開発環境を用意しよう!(Mac)

macOS環境のPython – python.jp

実行環境の準備

まずは以下のコマンドで仮想環境を作ります。( 今回はvenvという名前で作ります。)

bash
python3 -m venv venv

次に以下のコマンドでアクティベートしておきましょう。

bash
source venv/bin/activate

LINE Notifyの準備

今回はLINE NotifyをPythonを使って利用します。

LINE Notifyとは

Webサービスと連携すると、LINEが提供する公式アカウント”LINE Notify”から通知が届きます。

複数のサービスと連携でき、グループでも通知を受信することが可能です。

引用:LINE Notify

ここで必要な作業はトークンの発行です。以下の手順に従ってトークンを発行しましょう。

  1. LINE Notifyへアクセスしログイン
  2. マイページへ移動
  3. トークンを発行するを押す
  4. トークン名の記入、通知を送信するトークルームを選択し発行
  5. トークンをコピー

1.LINE Notifyへアクセスしログイン

line notify login

2.マイページへ移動

line notify mypage

3.トークンを発行するを押す

line notify token button

4.トークン名の記入、通知を送信するトークルームを選択し発行

line notify token info

5.トークンをコピー

line notify token copy

トークンが発行されるとLINE Notifyにトークン発行の通知がいきます。

Pythonで送信する

コードを書く

次に必要なパッケージのインストールとPythonで通知を送信するコードをLINE Notify API Documentに従って書いていきます。ひとまずコードの紹介から。

bash
pip install requests
Python
import requests
token = "ここに先ほど作成したトークンを入れます"
endpoint = "https://notify-api.line.me/api/notify"
headers = {"Authorization": "Bearer " + token}
params = {"message": "test message"}
requests.post(endpoint, headers=headers, data=params)

実行してみる

以下のコマンドで実行してみましょう。

bash
python3 上記のコードを記述したファイル名.py

LINE Notifyに「test message」と表示されていたら成功です。

コードの解説

公式のドキュメントからリクエスト方法とリクエストパラメータを確認してみましょう。

エンドポイントはhttps://notify-api.line.me/api/notifyです。

リクエスト方法

リクエストメソッド/ヘッダ
MethodPOST
Content-Typeapplication/x-www-form-urlencoded OR multipart/form-data
AuthorizationBearer [access_token]

リクエストパラメータ

必須のパラメータはmessageのみです。最大 1000文字まで送信可能のようです。

その他にも画像やスタンプを送ることもできます。(後ほどスタンプも紹介します)

今回はrequestsというHTTP通信用のライブラリを使います。

それぞれ必要なパラメータを設定し、requests.postメソッドに渡してリクエストします。

※Content-Typeは無くてもできましたが、いざ指定するとapplication/x-www-form-urlencodedの方しかできませんでした。

とても扱いやすいライブラリです。詳しい使い方は公式のクイックスタートをご覧ください。

定期的に通知する

今回は先ほどのコードをcronを用いて定期的に実行することで、通知を定期的に行います。

cronの設定

以下のコマンドでcronの設定を行っていきます。

bash
crontab -e

コマンドを実行すると、設定を入力できるようになるので以下の書式に従って設定します。

bash
()()()()(曜日) 実行するコマンドのパス
# 10分ごとに通知
*/10 * * * * python3 フォルダへのパス/記述したファイル名.py

WSLからWindowsのファイルへアクセスする場合はフォルダへのパスが

path
/mnt/ドライブ/...... 

などとなります。詳しくは以下で詳しく説明されています。

WSL (Windows Subsystem for Linux)の基本メモ

cronのスタート

設定が済んだらcronが実行されているか確認します。(cronがデフォルトで無効になっていることもあるので)以下のコマンドで確認しましょう。

bash
 # WSL
 sudo service cron status
 # Mac
 cron status

もし実行されていない場合には、以下のコマンドで実行します。

bash
 # WSL
 sudo service cron start
 # Mac
 cron start

後は実行されるを待つのみです!

注意点1

Macユーザーの方でPythonをbrew+pyenvで行っている方は、上記でPythonが実行できない場合があります。

その際にはpythonへのパスをフルパスで記述することで解決できます。

bash
# フルパスの確認
which python

注意点2

また、それでも実行できない場合には、フルディスクアクセスに cron を追加する必要があります。

以下をを参考に解決してください。

macOS 10.15 catalina で crontab を使用する

スタンプを通知に含める

LINE Notifyではテキスト以外に画像やスタンプなども通知できます。ここでは、スタンプの通知の仕方を紹介します。

基本的に先ほどのコードと同じで、スタンプの設定を追加します。

Python
import requests
token = "ここに先ほど作成したトークンを入れます"
endpoint = "https://notify-api.line.me/api/notify"
headers = {"Authorization": "Bearer " + token}
params = {
  "message": "test message",
  "stickerPackageId": "1",
  "stickerId": "1"
}
requests.post(endpoint, headers=headers, data=params)

sitckerPackageIdstickerIdは次のリンクから参照することができます。

sticker_list.pdf

Sticker_list_20190808(こちらはうまく動作しませんでした。また調査したいです。)

まとめ

今回はPythonで定期的にLINE Notifyへ通知を送る方法を紹介しました。

これらを発展させれば、身の回りで役に立つものが作れそうです。