こんばんは、@0yanです。
先日、実家に暮らしている妹から「お母さんが『うちは風通し良くて涼しいからエアコンつけなくて大丈夫』とか言ってエアコンつけないんだけど!熱中症になっちゃうよ!何とか言って!!」とヘルプ連絡が来たため、環境省の暑さ指数(WBGT)を家族のグループLINEに定期通知するようにしました。
前提条件
Windowsのタスクスケジューラ使っていますので自宅でPC起動しっ放しです(知識不足でHerokuやAWSにデプロイできていません)。
申し訳ございませんが、予めご承知おきくださいませ。
流れ
1.LINE Notifyからアクセストークンget
2.コーディング
3.LINE Notifyをトークルームに招待
4.batファイル作成&タスクスケジューラの設定
LINE Notifyからアクセストークンget
①LINE Notifyにログイン後、右上の自分の名前をクリックし、マイページに飛びます。
③トークン名の記入、通知するトークルームを選択(ご自身向けの場合は「1:1でLINE Notifyから通知を受け取る」を選択)して「発行する」ボタンを押下します。
④発行されたトークンをコピー、メモしておきます。ページ遷移するとトークンは二度と表示されないそうなのでご注意ください。
コーディング
BeautifulSoupで環境省の熱中症予防情報サイトから暑さ指数の情報を取得、LINE Notifyのエンドポイントにポストしております。
詳しくはコメントをご参照くださいませ。
# coding:utf-8
import bs4
import urllib
import requests
def main():
# LINEの通知系API(POST)のエンドポイント(アクセストークンに関連付けられたユーザまたはグループに通知を送信)
END_POINT_URL = "https://notify-api.line.me/api/notify"
# LINE Notifyのアクセストークン
TOKEN = "LINE Notifyのページで発行・コピーしたトークンをここにペースト"
# リクエストヘッダ(付与してアクセスすることで認証できる)
header = {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": "Bearer " + TOKEN
}
try:
# 環境省 熱中症予防情報サイト(スマホ版)のページ情報取得
WBGT_URL = "定期通知したい市区町村のページURLをコピペ"
html = urllib.request.urlopen(WBGT_URL).read()
# BeautifulSoupオブジェクトの生成
soup = bs4.BeautifulSoup(html, 'html5lib')
# spanタグすべて取得
spans = soup.find_all('span')
# メッセージの初期化
message = ""
# spanタグの中身(テキスト)を取得し、改行で区切ったうえでメッセージに追加
for span in spans:
message += span.text
message += '\n'
# メッセージの最後にURLも追加
message += "→ 変数「WBGT_URL」と同じ文字列をコピペ"
# リクエストパラメータ(通知オフでないとき、ユーザーに通知する)
parameter = {
"message": message,
"notificationDisabled": False
}
# エンドポイントにPOST
requests.post(END_POINT_URL, headers=header, params=parameter)
# 例外処理
except Exception as ex:
print(ex)
if __name__ == '__main__':
main()
LINE Notifyをトークルームに招待
トークルームにLINE Notifyを招待しないと通知飛ばないので招待します。
batファイル作成&タスクスケジューラの設定
こちら(↓)をご覧ください。
さいごに
関東も昨日梅雨明けしたので、これからが夏本番です。
皆様も是非、ご活用くださいませ!