LoginSignup
1
4

More than 3 years have passed since last update.

Python+Windowsタスクスケジューラで暑さ指数をLINE通知

Posted at

こんばんは、@0yanです。
先日、実家に暮らしている妹から「お母さんが『うちは風通し良くて涼しいからエアコンつけなくて大丈夫』とか言ってエアコンつけないんだけど!熱中症になっちゃうよ!何とか言って!!」とヘルプ連絡が来たため、環境省の暑さ指数(WBGT)を家族のグループLINEに定期通知するようにしました。

前提条件

Windowsのタスクスケジューラ使っていますので自宅でPC起動しっ放しです(知識不足でHerokuやAWSにデプロイできていません)。
申し訳ございませんが、予めご承知おきくださいませ。

流れ

1.LINE Notifyからアクセストークンget
2.コーディング
3.LINE Notifyをトークルームに招待
4.batファイル作成&タスクスケジューラの設定

LINE Notifyからアクセストークンget

LINE Notifyにログイン後、右上の自分の名前をクリックし、マイページに飛びます。
image.png

②次ページ下部の「トークンを発行する」ボタンを押下します。
image.png

③トークン名の記入、通知するトークルームを選択(ご自身向けの場合は「1:1でLINE Notifyから通知を受け取る」を選択)して「発行する」ボタンを押下します。
image.png

④発行されたトークンをコピー、メモしておきます。ページ遷移するとトークンは二度と表示されないそうなのでご注意ください。
image.png

コーディング

BeautifulSoupで環境省の熱中症予防情報サイトから暑さ指数の情報を取得、LINE Notifyのエンドポイントにポストしております。
詳しくはコメントをご参照くださいませ。

wbgt.py
# 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ファイル作成&タスクスケジューラの設定

こちら(↓)をご覧ください。

【備忘録】WindowsでPythonファイルを自動実行する

さいごに

関東も昨日梅雨明けしたので、これからが夏本番です。
皆様も是非、ご活用くださいませ!

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4