PythonからLINE通知させる

ソフト開発

pythonを使って、ネットから情報を収集して、何か処理させる。
webスクレイピングさせるのはよく見かけますが
処理結果を手元で見たい事ってありませんか?

そして、出来ればLINE通知がくればいいな~
というので、pythonでLINE通知させることをやってみました。

ちなみに、LINE Notifyというのは使っていません。

やりたいこと

ホームページから情報を取ってくる。

欲しい情報を作る。

計算結果をスマホで確認する。

ちょっと具体化してみる

pythonでwebスクレイピングする。

プログラムで四則演算する。

LINEに通知する。

LINEにもAPIがありました。

LINE Developers Message API

簡単のかな~と他の人のブログやqiitaを調べると
なにやら見たことないワードが登場。

Flaskが要る。Herokuが要る。webhook?デプロイ?git?

完全に脳停止・・・。

Pythonから通知するだけなのにな~と。

PythonからLINE通知する方法

pythonからLINEに通知するだけならそんなに敷居は高くない。

手順は以下の通り。

  • LINE Developersで公式アカウントを作る。
  • python側でrequestsライブラリを使ってPOSTするコードを作る。

簡単に書くとこの二つ。

LINE Developersで公式アカウントを作る。

公式アカウントと言いながら、
自分用BOTを作ると考えてもらってOKです。

今すぐはじめよう から QRコードをカメラで読み込んで登録します。

その後、必要事項をどんどん入力していきます。

チャンネル名がスマホのBOT名になるので、
そこだけはちゃんと考えたほうが良いです。

手抜きして、私のIDとかの部分を除いたスクショですが
このメッセージングAPIのタブの中にChannel access tokenがあります。

これをpythonに記述する必要があります。

※画像はブラウザの日本語翻訳後のものになります。

PythonのrequestsでPOSTするコード

LINE DevelopersのドキュメントのMessage APIの中に
ブロードキャストメッセージを送るという項目があります。

この機能を使います。

ブロードキャストメッセージを送る
LINE公式アカウントと友だちになっているすべてのユーザーに、
任意のタイミングでプッシュメッセージを送信します。

このような記述をされていますが、私的に翻訳するとこうなります。

自分で作ったBOT(=LINE公式アカウント)と
チャットルームにいる自分のLINE(=友達になっているユーザー)に
Pythonのプログラムを走らせてメッセージを送る。

またrequestsライブラリはこちらがシンプルで
調べれば調べる程、分かりやすく感じました。

人間のためのHTTP — requests-docs-ja 1.0.4 documentation

①ターミナル・端末などでインストールします。
pip install requests

②コードの先頭辺りでimportします。
import requests
import json

requests以外にjsonも必要です。

③カスタムヘッダーの項目のように記述します。

下記は抜粋

>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> headers = {'content-type': 'application/json'}

>>> r = requests.post(url, data=json.dumps(payload), headers=headers)

これを踏まえたうえで、LINEのブロードキャストの箇所を見ると
pythonはなくshellの例しかありません。

下記はLINE ブロードキャストメッセージのリクエスト例の抜粋

curl -v -X POST https://api.line.me/v2/bot/message/broadcast \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: {UUID}' \
-d '{
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}'

requests.postの引数にLINE側の記述を合わせる作業が必要です。

url=https://api.line.me/v2/bot/message/broadcast

payload = {‘messages’: [{ “type”:”text”, “text”:”Hello, world1″ }]”}

headers = {‘content-type’: ‘application/json’,’Authorization’: ’Bearer {channel access token}’}

Pythonのrequestsの書き方にLINE側を合わせるとこのようになります。

ちなみにcurlの -H はヘッダーのオプション -d はデータのオプション
を意味しています。

最後に

いかがだったでしょうか?

pythonからLINEにメッセージを送るのは意外とできると思います。

私自身、webhookやherokuの設定がうまくできず挫折しました。

しかし、この方法なら、LINEを使って情報をスマホに届けるという
目的は達成できました。

どういうわけかうまく出来なかったという人は
機能を限定すれば、敷居も下がるので
とっつきやすいのではないでしょうか。

コメント

タイトルとURLをコピーしました