自作コロナ感染人数自動通知スクリプト


どうもはじめまして、東京在住のwangyです

毎日東京コロナ感染者数の自動通知スクリプトを作成いたしました。実行環境はpython3です。
ChatworkのAPIを使って、通知先がChatworkだけでちょっと適用範囲が狭いですが、よろしければお使いください

コード

import urllib.request
import urllib.parse
import csv
import pandas
import datetime
import json

def get_cvoid_infect_num(date):

    url = "https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv"
    df = pandas.read_csv(url,header=None)

    df_filtered = df[df[4]==date.__str__()]

    infect_num = len(df_filtered)

    return infect_num

def send_to_chatwork(messgae):
    chatwork_endpoint = "https://api.chatwork.com/v2"
    room_id = 
    API_TOKEN = 

    chatwork_api_url = "{}/rooms/{}/messages".format(chatwork_endpoint,room_id)

    obj = {"body":message}
    data = urllib.parse.urlencode(obj).encode()

    req = urllib.request.Request(url=chatwork_api_url,data=data)


    req.add_header(key="X-ChatWorkToken",val=API_TOKEN)

    with urllib.request.urlopen(req) as res:
        response_body = res.read().decode("utf-8")


    return

if __name__ == "__main__":
    yesterday = datetime.date.today() - datetime.timedelta(1)

    infect_num = get_cvoid_infect_num(yesterday)

    message = "[info][title]コロナ感染者数通知[/title]昨日({})の東京コロナ感染者数: {}人[/info]".format(yesterday.__str__(),infect_num)

    send_to_chatwork(message)

send_to_chatwork関数内のroom_idとapi_token変数に自分用のものを入力すればOKです。

def send_to_chatwork(messgae):
    chatork_endpoint = "https://api.chatwork.com/v2"
    room_id = 
    API_TOKEN = 

スクリプト解析

データ源は東京都ウイルス対策サイトから提供されるCSVファイルです、毎日の午後17時ぐらい更新されるみたいです
https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv

基本的にはこちらのデータから該当する日付の感染者データをカウントします。
pandasというデータ処理のライブラリを使っています、興味ある方は以下を参照してください
https://pandas.pydata.org/

def get_cvoid_infect_num(date):

    url = "https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv"
    df = pandas.read_csv(url,header=None)

    df_filtered = df[df[4]==date.__str__()]

    infect_num = len(df_filtered)

    return infect_num

chatworkの送信は以下の関数で処理する、chatwork api tokenやroom_idを入力すればOKです
使用するエンドポイントhttps://api.chatwork.com/v2/rooms/{$room_id}/messages

def send_to_chatwork(messgae):
    chatwork_endpoint = "https://api.chatwork.com/v2"
    room_id = 
    API_TOKEN = 

    chatwork_api_url = "{}/rooms/{}/messages".format(chatwork_endpoint,room_id)

    obj = {"body":message}
    data = urllib.parse.urlencode(obj).encode()

    req = urllib.request.Request(url=chatwork_api_url,data=data)


    req.add_header(key="X-ChatWorkToken",val=API_TOKEN)

    with urllib.request.urlopen(req) as res:
        response_body = res.read().decode("utf-8")

    return

chatwork APIの使用方法は以下を参照してください
https://developer.chatwork.com/ja/index.html

おわり

第二回の緊急事態宣言が終了しましたが、コロナの感染がまだ完全に収束するまでまだ遠いなので
マスクをかけ、手洗いを忘れずにで頑張りましょう