🤧
埼玉県のコロナ感染者数を LINE に通知してみる
埼玉県のコロナ感染者数を LINE に通知してみました。
感染者数情報の確認
上記のウェブサイトを確認していると、
感染者数を纏めたcsvファイルが毎日置かれているようでした。
ダウンロードし内容を確認すると、以下カラムで
レコードの最終行に当日の情報が載っていました。
ですので、csvをダウンロードしてレコードの最終行を取得することにします。
LINE Notify の準備
LINEが提供する公式アカウント"LINE Notify"から通知を受信するため、
トークンを発行します。
上記に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