🤧

埼玉県のコロナ感染者数を LINE に通知してみる

2022/02/18に公開

埼玉県のコロナ感染者数を LINE に通知してみました。

感染者数情報の確認

https://www.pref.saitama.lg.jp/a0701/covid19/jokyo.html

上記のウェブサイトを確認していると、
感染者数を纏めたcsvファイルが毎日置かれているようでした。

ダウンロードし内容を確認すると、以下カラムで
レコードの最終行に当日の情報が載っていました。

ですので、csvをダウンロードしてレコードの最終行を取得することにします。

LINE Notify の準備

LINEが提供する公式アカウント"LINE Notify"から通知を受信するため、
トークンを発行します。

https://notify-bot.line.me/ja/

上記にLINEに登録しているメールアドレス、パスワードでログインします。

マイページの下の方にある「トークンを発行する」を押下し、任意の名前でトークンを発行します。

発行したトークンを控えておきます。

python3で実装してみる

CSVのファイル名が「2suii20220217」と独特で、
日付以外の規則性が読み取れず・・・
ファイル名が変更される可能性が高そうなため、スクレイピングすることにしました。

import os
import requests
import urllib.request
from bs4 import BeautifulSoup

LINE_NOTIFY_TOKEN = '〜発行したトークンを記述〜'


def get_csv():
    saitama_url = 'https://www.pref.saitama.lg.jp/a0701/covid19/jokyo.html'
    res = requests.get(saitama_url)

    soup = BeautifulSoup(res.content, 'lxml')
    href = soup.select('a[href$="csv"]')
    csv_url = ['https://www.pref.saitama.lg.jp' + _["href"] for _ in href]
    csv_file = os.path.basename(csv_url[0])
    urllib.request.urlretrieve(csv_url[0], f'/tmp/{csv_file}')

    with open(f'/tmp/{csv_file}', encoding='shift-jis', newline='') as f:
        rows = [row for row in f]
        return rows[0].split(','), rows[-1:][0].split(',')


def line_notify(message):
    url = 'https://notify-api.line.me/api/notify'
    headers = {'Authorization': f'Bearer {LINE_NOTIFY_TOKEN}'}
    data = {'message': message}
    requests.post(url, headers=headers, data=data)


def main():
    csv_header, csv_record = get_csv()
    info = dict(zip(csv_header, csv_record))

    message = (
        info[list(info.keys())[0]] + '\n'
        '・' + list(info.keys())[1] + '\n\t' + info[list(info.keys())[1]] + '\n'
        '・' + list(info.keys())[2] + '\n\t' + info[list(info.keys())[2]] + '\n'
        '・' + list(info.keys())[3] + '\n\t' + info[list(info.keys())[3]] + '\n'
        '・' + list(info.keys())[4] + '\t' + info[list(info.keys())[4]]
    )
    line_notify(message)


if __name__ == "__main__":
    main()

結果

読みやすくしたつもりが微妙ですが、あとはどこかのサーバのcrontabにでも
仕込んで日々の通知を待ってみます。

Discussion