名大生が新型コロナウィルス(Covid-19)のためのWebAPIを開発した話

<img width="916" alt="スクリーンショット 2020-04-10 11 59 01" src="https://user-images.githubusercontent.com/43264434/78958349-c73d2880-7b22-11ea-965f-fa6cb7bd3266.png">

# はじめに
名古屋大学、情報・通信工学専攻、河口研究室の修士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](https://github.com/RuiHirano/covid19-rader-for-japan-api)

## 作ろうと思ったきっかけ
作ろうと思ったのは２月の終わりごろだったと思います。その頃、新型コロナウィルスが世界のいたるところで発生してきて、インターネット上では多くの可視化サイトが開発されていました。その中でも特に、東京都の[新型コロナウィルス感染症対策サイト](https://stopcovid19.metro.tokyo.lg.jp/)が大きな話題となっていました。GitHubによって公開されることで世界中のエンジニアが貢献し、あっという間に素晴らしいサイトができあがりました。

オープンソースの力は偉大ですね。

また、それと同時にSignate社が独自で行っていた「Covid19 Challenge」というのをニュースでみました。[Covid19 Challenge](https://docs.google.com/spreadsheets/d/1CnQOf6eN18Kw5Q6ScE_9tFoyddk4FBwFZqZpt_tMOm4/edit#gid=642719404)は一般の方が参加してデータセットを作成していくというもので、その時は16名ほどの貢献者が毎日更新していました。

このSignate社が公開しているデータセットを使って可視化サイトを作ってみようと思い、半日かけて可視化サイトの雛形を作成してみたのですが、結局このデータセットはサービスに使うには不向き（面倒）だという結論に至りました。(Google Spreadsheetにて書かれていたり、匿名の人が行うためデータに欠損値や間違ったデータが入っていることがあったため。)

そんな中、GitHub上で公開されているデータセットをみつけ、どうせなら誰でも使いやすい様にAPIを開発しようということで、可視化サイトの開発と並行してWebAPIの開発を行うことになりました。


## 本APIを使用したプロダクト一覧
### Covid19 Rader For Japan
- GitHub: [https://github.com/RuiHirano/covid19-rader-for-japan](https://github.com/RuiHirano/covid19-rader-for-japan)
- Webサイト: [https://www.covid19-rader-for-japan.com](https://www.covid19-rader-for-japan.com)
<img src="https://user-images.githubusercontent.com/43264434/78895987-b781fd80-7aaa-11ea-874b-9c49d801e693.png" width=800>

### other...
もしサービスに利用した場合、ご連絡ください。追記していきます。


# 使い方
使い方を説明します。READMEにも書かれてるのでそちらも参考にしてください。

## 使用可能なデータセット

1. [Patients Data](#anchor1) 罹患者のデータ
2. [Prefecture Data](#anchor2) 都道府県の名前や緯度経度などのデータ
3. [DetailByRegion Data](#anchor3) 都道府県別の統計のデータ
4. [DailyReport Data](#anchor4)　日毎の統計のデータ
5. [DailyPositiveByPref Data](#anchor5)　日毎、都道府県毎の罹患者のデータ
6. [DailyDeathByPref Data](#anchor6)　日毎、都道府県毎の志望者のデータ
7. [DailyCallcenter Data](#anchor7)　日毎、コールセンターへのお問い合わせ数のデータ
8. [DailyShip Data](#anchor8)　日毎、コールセンターへのお問い合わせ数のデータ
9. [News Data](#anchor9)　報道データ

<a id="anchor1"></a>
## Patients Data
罹患者の基本的な情報を取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/positiveDetail.csv](https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/positiveDetail.csv)

**Endpont**: [https://covid19-rader-for-japan.appspot.com/api/v1/patients](https://covid19-rader-for-japan.appspot.com/api/v1/patients)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/patients
~~~

**Response:**

~~~json
[
    {
        "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":""
    },
...
~~~

<a id="anchor2"></a>
## Prefecture Data
都道府県の名前、緯度経度などを取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/prefectures.csv](https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/prefectures.csv)

**Endpont**: [https://covid19-rader-for-japan.appspot.com/api/v1/prefectures](https://covid19-rader-for-japan.appspot.com/api/v1/prefectures)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/prefectures
~~~

**Response:**

~~~json
[
  {
    "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",
  },
  ...
]
~~~

<a id="anchor3"></a>
## DetailByRegion Data
都道府県毎の感染者数、入院者数、退院者数、死者数を日毎に取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/detailByRegion.csv](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](https://covid19-rader-for-japan.appspot.com/api/v1/detail-by-region)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/detail-by-region
~~~

**Response:**

~~~json
[
    {
        "date":"20200319",
        "prefecture":"北海道",
        "cases":153,
        "hospital":77,
        "discharge":69,
        "deaths":7
    },
    {
        "date":"20200319",
        "prefecture":"愛知県",
        "cases":123,
        "hospital":106,
        "discharge":3,
        "deaths":14
    },
  ...
]
~~~

<a id="anchor4"></a>
## DailyReport Data
日本全体の日毎の詳細な情報を取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/resultDailyReport.csv](https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/resultDailyReport.csv)

**Endpont**: [https://covid19-rader-for-japan.appspot.com/api/v1/daily/report](https://covid19-rader-for-japan.appspot.com/api/v1/daily/report)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/report
~~~

**Response:**

~~~json
[
    {
        "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":""
    }
  ...
]
~~~

<a id="anchor5"></a>
## DailyPositiveByPref Data
都道府県毎の罹患者数を日毎に取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/byDate.csv](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](https://covid19-rader-for-japan.appspot.com/api/v1/daily/positive-by-pref)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/positive-by-pref
~~~

**Response:**

~~~json
[
    {
        "date":"20200330",
        "hokkaido":"",
        "aomori":"",
        "iwate":"",
        ...
        "tokyo":"1",
        "kanagawa":"1",
        "niigata":"",
        "oita":"",
        "charter":"",
        "quarantine_officer":"",
        "cruise":"1"
    },
  ...
]
~~~

<a id="anchor6"></a>

## DailyDeathByPref Data
都道府県毎の死者数を日毎に取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/death.csv](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](https://covid19-rader-for-japan.appspot.com/api/v1/daily/death-by-pref)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/death-by-pref
~~~

**Response:**

~~~json
[
    {
        "date":"20200330",
        "hokkaido":"",
        "aomori":"",
        "iwate":"",
        ...
        "tokyo":"1",
        "kanagawa":"1",
        "niigata":"",
        "oita":"",
        "charter":"",
        "quarantine_officer":"",
        "cruise":"1"
    },
  ...
]
~~~

<a id="anchor7"></a>
## DailyCallCenter Data
日毎のコールセンターへの問合せ件数などを取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/callCenter.csv](https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/callCenter.csv)

**Endpont**: [https://covid19-rader-for-japan.appspot.com/api/v1/daily/callcenter](https://covid19-rader-for-japan.appspot.com/api/v1/daily/callcenter)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/callcenter
~~~

**Response:**

~~~json
[
    {
        "date":"20200128",
        "call":"99",
        "fax":"",
        "mail":"",
        "line":"3"
    },
    {
        "date":"20200129",
        "call":"250",
        "fax":"",
        "mail":"",
        "line":"3"
    },
  ...
]
~~~

<a id="anchor8"></a>
## DailyShip Data
クルーズ船(ダイヤモンドプリンセス号)の統計データを取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/shipDailyReport.csv](https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/shipDailyReport.csv)

**Endpont**: [https://covid19-rader-for-japan.appspot.com/api/v1/daily/ship](https://covid19-rader-for-japan.appspot.com/api/v1/daily/ship)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/daily/ship
~~~

**Response:**

~~~json
[
    {
        "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"
    },
    ...
]
~~~

<a id="anchor9"></a>
## DailyNews Data
日毎の報道の情報を取得できます。

**Dataset**

[https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/mhlw_houdou.csv](https://github.com/swsoyee/2019-ncov-japan/blob/master/Data/mhlw_houdou.csv)

**Endpont**: [https://covid19-rader-for-japan.appspot.com/api/v1/news](https://covid19-rader-for-japan.appspot.com/api/v1/news)

~~~bash
$ curl https://covid19-rader-for-japan.appspot.com/api/v1/news
~~~

**Response:**

~~~json
[
    {
        "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