東京都がこんな感じでいけてるAPIを公開しているので、勉強がてらに毎日の感染数を取得するアプリを作成してみた
##コードはわずか18行程度
import requests
import datetime
import pandas as pd
today = datetime.datetime.now().strftime('%Y-%m-%d')
payload = {'from': today, 'till': today, 'limit': 1000}
res = requests.get(
"https://api.data.metro.tokyo.lg.jp/v1/Covid19Patient", params=payload)
data = res.json()
infect_data = data[0]
endCursor = data[1]
df = pd.DataFrame(infect_data)
total = df.shape[0]
print(f'本日の東京のコロナ感染数は{total}人です。')
本日の東京のコロナ感染数は766人です。
ただこれだとlimitの設定が1000人以上だと人数の取得ができない。
東京都のAPIのページには以下の通り書かれているので、
endCursorをパラメータに指定しないといけないらしい
マッチレコード数がlimitを超える場合、前のレスポンスにおける"endCursor"の値を指定することで、>それ以降のデータを出力 (URLエンコードが必要)
こちらについては確かにレスポンスデータを見るとリスト形式で以下のフッターが存在するため、
そのendCursorの値をパラメータとして渡してやらなければいけないようだ。
{'moreResults': 'MORE_RESULTS_AFTER_LIMIT',
'endCursor': 'Cn4KHQoQ5YWs6KGoX+W5tOaciOaXpRIJCICA6saWp/ACEllqGmJ+dG9reW8tY2F0YWxvZy1wcm9kdWN0aW9ucjsLEghSZXZpc2lvbiISQ292aWQxOVBhdGllbnQ6NDIwDAsSDkNvdmlkMTlQYXRpZW50GICAgPS29ucLDBgAIAE=',
'revision': 420,
'updated': '2021-05-19T10:17:50.674Z'}
また1000件超えてレスポンスが存在しない場合は、次の通りのNO_MORE_RESULTSというmoreResultsの値となるためこちらをキーに判定させてやることができそうである。
{'moreResults': 'NO_MORE_RESULTS',
'endCursor': 'Cn4KHQoQ5YWs6KGoX+W5tOaciOaXpRIJCICA6saWp/ACEllqGmJ+dG9reW8tY2F0YWxvZy1wcm9kdWN0aW9ucjsLEghSZXZpc2lvbiISQ292aWQxOVBhdGllbnQ6NDIwDAsSDkNvdmlkMTlQYXRpZW50GICAgPS29v8LDBgAIAE=',
'revision': 420,
'updated': '2021-05-19T10:17:50.674Z'}]
よって上記を反映すれば1000件を超えた後も値を取得できそうであるが、
そのコードについてはまた別の日に対応しようと思う。