pythonを使って、ネットから情報を収集して、何か処理させる。
webスクレイピングさせるのはよく見かけますが
処理結果を手元で見たい事ってありませんか?
そして、出来ればLINE通知がくればいいな~
というので、pythonでLINE通知させることをやってみました。
ちなみに、LINE Notifyというのは使っていません。
やりたいこと
ホームページから情報を取ってくる。
欲しい情報を作る。
計算結果をスマホで確認する。
ちょっと具体化してみる
pythonでwebスクレイピングする。
プログラムで四則演算する。
LINEに通知する。
LINEにも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を使って情報をスマホに届けるという
目的は達成できました。
どういうわけかうまく出来なかったという人は
機能を限定すれば、敷居も下がるので
とっつきやすいのではないでしょうか。
コメント