目次

最新の記事

MENU
記事を探す

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

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

今回必要なもの

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

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

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

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

Macユーザーの方は以下などを、参考にPythonをインストールしてください。

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

macOS環境のPython – python.jp

実行環境の準備

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

 python3 -m venv venv

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

 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へアクセスしログイン

2.マイページへ移動

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

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

5.トークンをコピー

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

Pythonで送信する

コードを書く

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

pip install requests
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)

実行してみる

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

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

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

コードの解説

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

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

リクエスト方法

リクエストメソッド/ヘッダ
Method POST
Content-Type application/x-www-form-urlencoded
OR
multipart/form-data
Authorization Bearer <access_token>

リクエストパラメータ

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

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

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

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

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

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

定期的に通知する

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

cronの設定

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

 crontab -e

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

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

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

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

などとなります。詳しくはこちらで詳しく説明されています。

cronのスタート

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

 # WSL
 sudo service cron status
 # Mac
 cron status

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

 # WSL
 sudo service cron start
 # Mac
 cron start

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

注意点1

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

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

# フルパスの確認
which python

上記で出てきたパスを先ほどcronに設定した。python3の部分へ置き換えます。

注意点2

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

こちらなどを参考に解決してください。

スタンプを通知に含める

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

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

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へ通知を送る方法を紹介しました。

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