LoginSignup
0
4

More than 3 years have passed since last update.

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

Posted at

どうもはじめまして、東京在住の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

おわり

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

0
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
0
4