はじめに
名古屋大学、情報・通信工学専攻、河口研究室の修士2年生です。
タイトルの通り、新型コロナウィルスに関する情報を取得可能なWebAPIを開発しました。
先日GAEにてデプロイし、多少なりとも利用していただける方も増えてきたので、WebAPIを作成するにあたっての技術的な話からAPIの使い方などを記事にしようと思います。
Covid19 Rader for Japan APIとは
Covid19 Rader for Japan APIは日本における新型コロナウィルスの情報を取得できるREST APIです。
取得できる情報は
- 罹患者データ
- 都道府県毎の感染者数や入院者数、死亡者数
- 日毎の感染者数、検査人数、死亡者数
という基本的な情報の他に
- クルーズ船での感染者数
- コールセンターへの問合せ情報
- 最新の報道ニュース
なども取得できます。
本APIのGitHubはこちらです。
https://github.com/RuiHirano/covid19-rader-for-japan-api
作ろうと思ったきっかけ
作ろうと思ったのは2月の終わりごろだったと思います。その頃、新型コロナウィルスが世界のいたるところで発生してきて、インターネット上では多くの可視化サイトが開発されていました。その中でも特に、東京都の新型コロナウィルス感染症対策サイトが大きな話題となっていました。GitHubによって公開されることで世界中のエンジニアが貢献し、あっという間に素晴らしいサイトができあがりました。
オープンソースの力は偉大ですね。
また、それと同時にSignate社が独自で行っていた「Covid19 Challenge」というのをニュースでみました。Covid19 Challengeは一般の方が参加してデータセットを作成していくというもので、その時は16名ほどの貢献者が毎日更新していました。
このSignate社が公開しているデータセットを使って可視化サイトを作ってみようと思い、半日かけて可視化サイトの雛形を作成してみたのですが、結局このデータセットはサービスに使うには不向き(面倒)だという結論に至りました。(Google Spreadsheetにて書かれていたり、匿名の人が行うためデータに欠損値や間違ったデータが入っていることがあったため。)
そんな中、GitHub上で公開されているデータセットをみつけ、どうせなら誰でも使いやすい様にAPIを開発しようということで、可視化サイトの開発と並行してWebAPIの開発を行うことになりました。
本APIを使用したプロダクト一覧
Covid19 Rader For Japan
- GitHub: https://github.com/RuiHirano/covid19-rader-for-japan
- Webサイト: https://www.covid19-rader-for-japan.com
other...
もしサービスに利用した場合、ご連絡ください。追記していきます。
使い方
使い方を説明します。READMEにも書かれてるのでそちらも参考にしてください。
使用可能なデータセット
- Patients Data 罹患者のデータ
- Prefecture Data 都道府県の名前や緯度経度などのデータ
- DetailByRegion Data 都道府県別の統計のデータ
- DailyReport Data 日毎の統計のデータ
- DailyPositiveByPref Data 日毎、都道府県毎の罹患者のデータ
- DailyDeathByPref Data 日毎、都道府県毎の志望者のデータ
- DailyCallcenter Data 日毎、コールセンターへのお問い合わせ数のデータ
- DailyShip Data 日毎、コールセンターへのお問い合わせ数のデータ
- News Data 報道データ
Patients Data
罹患者の基本的な情報を取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/positiveDetail.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/patients
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/patients
Response:
[
{
"id":"ID01001",
"date":"2020/01/28",
"prefecture":"北海道",
"residence":"国外(武漢市)",
"age":"40代",
"sex":"女性",
"attribute":"来日観光客",
"prefecture_number":"北海道1",
"travel_or_contact":"渡航歴",
"detail":"中国(武漢)",
"src":"https://www.mhlw.go.jp/stf/newpage_09158.html",
"onset":"2020/01/26",
"symptom":"1",
"death_or_discharge_date":"",
"comment1":"",
"comment2":"",
"outcome":"",
"outcome_src":""},{"id":"ID01002",
},
{
"date":"2020/02/14",
"prefecture":"北海道",
"residence":"札幌市",
"age":"50代",
"sex":"男性",
"attribute":"来日観光客",
"prefecture_number":"北海道2",
"travel_or_contact":"",
"detail":"",
"src":"http://www.pref.hokkaido.lg.jp/hf/kth/kak/hasseijoukyou.htm",
"onset":"2020/01/31",
"symptom":"1",
"death_or_discharge_date":"",
"comment1":"",
"comment2":"",
"outcome":"",
"outcome_src":""
},
...
Prefecture Data
都道府県の名前、緯度経度などを取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/prefectures.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/prefectures
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/prefectures
Response:
[
{
"id": 1,
"name_ja": "北海道",
"name_en": "Hokkaido",
"regions": "0",
"lat": "43.46722222",
"lng": "142.8277778",
},
{
"id": 2,
"name_ja": "青森",
"name_en": "Aomori",
"regions": "1",
"lat": "40.78027778",
"lng": "140.83194440000003",
},
...
]
DetailByRegion Data
都道府県毎の感染者数、入院者数、退院者数、死者数を日毎に取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/detailByRegion.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/detail-by-region
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/detail-by-region
Response:
[
{
"date":"20200319",
"prefecture":"北海道",
"cases":153,
"hospital":77,
"discharge":69,
"deaths":7
},
{
"date":"20200319",
"prefecture":"愛知県",
"cases":123,
"hospital":106,
"discharge":3,
"deaths":14
},
...
]
DailyReport Data
日本全体の日毎の詳細な情報を取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/resultDailyReport.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/daily/report
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/report
Response:
[
{
"Date":"2020-02-06",
"PcrD":"132",
"PositiveD":"16",
"SymptomD":"16",
"SymptomlessD":"0",
"SymptomConfirmingD":"0",
"HospitalizeD":"9",
"MildD":"0",
"SevereD":"0",
"ConfirmingD":"3",
"WaitingD":"0",
"DischargeD":"4",
"DeathD":"0",
"PcrF":"566",
"PositiveF":"9",
"SymptomF":"5",
"SymptomlessF":"4",
"SymptomConfirmingF":"0",
"HospitalizeF":"9",
"MildF":"7",
"SevereF":"0",
"ConfirmingF":"2",
"WaitingF":"0",
"DischargeF":"0",
"DeathF":"0",
"PcrX":"",
"PositiveX":"",
"Symptom":"",
"Symptomless":"",
"SymptomConfirming":"",
"Hospitalized":"",
"Mild":"",
"SevereX":"",
"Confirming":"",
"Waiting":"",
"DischargeX":"",
"DeathX":"",
"PcrY":"31",
"PositiveY":"10",
"DischargeY":"",
"SymptomlessDischarge":"",
"SymptomDischarge":"",
"SevereY":"",
"DeathY":"0",
"Pcr":"729",
"Discharge":"4",
"PcrDiff":"",
"DischargeDiff":""
}
...
]
DailyPositiveByPref Data
都道府県毎の罹患者数を日毎に取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/byDate.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/daily/positive-by-pref
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/positive-by-pref
Response:
[
{
"date":"20200330",
"hokkaido":"",
"aomori":"",
"iwate":"",
...
"tokyo":"1",
"kanagawa":"1",
"niigata":"",
"oita":"",
"charter":"",
"quarantine_officer":"",
"cruise":"1"
},
...
]
DailyDeathByPref Data
都道府県毎の死者数を日毎に取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/death.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/daily/death-by-pref
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/death-by-pref
Response:
[
{
"date":"20200330",
"hokkaido":"",
"aomori":"",
"iwate":"",
...
"tokyo":"1",
"kanagawa":"1",
"niigata":"",
"oita":"",
"charter":"",
"quarantine_officer":"",
"cruise":"1"
},
...
]
DailyCallCenter Data
日毎のコールセンターへの問合せ件数などを取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/callCenter.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/daily/callcenter
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/callcenter
Response:
[
{
"date":"20200128",
"call":"99",
"fax":"",
"mail":"",
"line":"3"
},
{
"date":"20200129",
"call":"250",
"fax":"",
"mail":"",
"line":"3"
},
...
]
DailyShip Data
クルーズ船(ダイヤモンドプリンセス号)の統計データを取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/shipDailyReport.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/daily/ship
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/ship
Response:
[
{
"date":"20200205",
"pcr":"31",
"positive":"10",
"discharge":"",
"symotomless_discharge":"",
"symotom_discharge":"",
"severe":"",
"death":"0"
},
{
"date":"20200206",
"pcr":"",
"positive":"",
"discharge":"",
"symotomless_discharge":"",
"symotom_discharge":"",
"severe":"",
"death":"0"
},
...
]
DailyNews Data
日毎の報道の情報を取得できます。
Dataset
https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/mhlw_houdou.csv
Endpont: https://covid19-rader-for-japan.appspot.com/api/v1/news
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/news
Response:
[
{
"id":"1",
"date":"20200116",
"title":"新型コロナウイルスに関連した肺炎の患者の発生について(1例目)",
"Link":"https://www.mhlw.go.jp/stf/newpage_08906.html"
},
{
"id":"2",
"date":"20200124",
"title":"新型コロナウイルスに関連した肺炎の患者の発生について(2例目)",
"Link":"https://www.mhlw.go.jp/stf/newpage_09079.html"
},
...
]
おわりに
WebAPI, Webサイトともに新型コロナウィルスによる影響がなくなるまで更新し続けるつもりです。
多くの方に利用していただいて様々な形で役に立てたら幸いです。
貢献のお願い
Contributerとして手伝っていただける方を募集しています。使用言語はgolangです。
また、同時にフロントエンドの新型コロナ情報サイトも作成しています。フロントエンドではReactを使用しています。そちらも貢献していただけると助かります。
Web REST API
https://github.com/RuiHirano/covid19-rader-for-japan-api
Webサイト
https://github.com/RuiHirano/covid19-rader-for-japan