GitHub - apfeuti/covid19-rest: Provides a REST-API to get data about COVID19 cases. Data sources are openZH (for detailed figures about Switzerland) and Johns Hopkins University. (original) (raw)

This is a REST-API to get data about COVID19 (new corona-virus) cases. Data sources areOpen Data Kanton Zürich (openZH)(for detailed figures about Switzerland) andJohns Hopkins University(for figures about the world - including detailed data on city-level for the United States of America (USA)).

The data can be filtered by country, area, (city/admin on JHU-data) and date. Aggregated sums are available on each filter level. Output is available in json and csv.

Usage

Server

[https://covid19-rest.herokuapp.com]

API for openZH-data (Switzerland)

Method API Remark Example call
GET /api/doc currently a redirect to this github-readme [https://covid19-rest.herokuapp.com/api/doc]
GET /api/openzh/v1/all read all data [https://covid19-rest.herokuapp.com/api/openzh/v1/all]
GET /api/openzh/v1/country/ read all data for the given country. CH (Switzlerand) FL (Fürstentum Liechtenstein) [https://covid19-rest.herokuapp.com/api/openzh/v1/country/CH]
GET /api/openzh/v1/country//area/ read all data for the given country and area. Area is one of this Swiss-cantons, column 'code'. Not supported for country FL [https://covid19-rest.herokuapp.com/api/openzh/v1/country/CH/area/BE]

Query parameters

On all calls listed above, you can add optionally the following query-parameters.

Parameter Remark Example call
date= only data for the given date. Format: yyyy-mm-dd [https://covid19-rest.herokuapp.com/api/openzh/v1/country/CH?date=2020-03-23]
skipRecords=true returns only "totals" and NO "records" [https://covid19-rest.herokuapp.com/api/openzh/v1/all?skipRecords=true]
output=csv output in csv instead of json [https://covid19-rest.herokuapp.com/api/openzh/v1/country/CH?date=2020-03-23&output=csv]

Deprecated fields

Please upgrade your client to the renamed fields (renamed by openzh).The deprecated fields will be removed on May 14, 2020 This concerns fields in "totals" and "records".

Deprecated field new field-name
ncumul_hosp current_hosp
ncumul_ICU current_icu
ncumul_vent current_vent
ncumul_hosp_fwd current_hosp_fwd
ncumul_ICU _fwd current_icu_fwd
ncumul_vent_fwd current_vent_fwd

Output json

{ "totals": { "ncumul_tested_fwd": 21469, "ncumul_conf_fwd": 26467, "ncumul_hosp_fwd": 1769, "ncumul_ICU_fwd": 330, "ncumul_vent_fwd": 208, "current_hosp_fwd": 1769, "current_icu_fwd": 330, "current_vent_fwd": 208, "ncumul_released_fwd": 3720, "ncumul_deceased_fwd": 1262 }, "records": [ { "date": "2020-04-15", "time": "14:45", "abbreviation_canton_and_fl": "AG", "ncumul_tested": "", "ncumul_conf": 929, "new_hosp": "", "current_hosp": 69, "current_icu": 20, "current_vent": 20, "ncumul_released": 450, "ncumul_deceased": 22, "source": "https://www.ag.ch/media/kanton_aargau/themen_1/coronavirus_1/lagebulletins/200415_KFS_Coronavirus_Lagebulletin_33.pdf", "ncumul_tested_fwd": 0, "ncumul_conf_fwd": 929, "ncumul_hosp": 69, "ncumul_ICU": 20, "ncumul_vent": 20, "ncumul_hosp_fwd": 69, "ncumul_ICU_fwd": 20, "ncumul_vent_fwd": 20, "current_hosp_fwd": 69, "current_icu_fwd": 20, "current_vent_fwd": 20, "ncumul_released_fwd": 450, "ncumul_deceased_fwd": 22 }, { "date": "2020-04-15", "time": "11:00", "abbreviation_canton_and_fl": "AI", "ncumul_tested": "", "ncumul_conf": 24, "new_hosp": "", "current_hosp": "", "current_icu": "", "current_vent": "", "ncumul_released": "", "ncumul_deceased": "", "source": "https://www.ai.ch/themen/gesundheit-alter-und-soziales/gesundheitsfoerderung-und-praevention/uebertragbare-krankheiten/coronavirus", "ncumul_tested_fwd": 0, "ncumul_conf_fwd": 24, "ncumul_hosp": "", "ncumul_ICU": "", "ncumul_vent": "", "ncumul_hosp_fwd": 1, "ncumul_ICU_fwd": 0, "ncumul_vent_fwd": 0, "current_hosp_fwd": 1, "current_icu_fwd": 0, "current_vent_fwd": 0, "ncumul_released_fwd": 0, "ncumul_deceased_fwd": 0 }, .... ] }

Remark: 'totals' are available by /all and /country. It's the sum over all countries/areas, hence you can get the totals for Switzerland with /country/CH. If no date-query-parameter is set, the last day per area is taken to build the sum.

Forwarded values: Field-names ending with "_fwd" are never empty. Instead the value from the previous date is taken. For many usecases (e. g. aggregate totals), the fwd-fields are the preferred choice. The field without _fwd is empty, if no value was reported by a canton for that date.

Ouptut csv

"date","time","abbreviation_canton_and_fl","ncumul_tested","ncumul_conf","new_hosp","current_hosp","current_icu","current_vent","ncumul_released","ncumul_deceased","source","ncumul_tested_fwd","ncumul_conf_fwd","ncumul_hosp","ncumul_ICU","ncumul_vent","ncumul_hosp_fwd","ncumul_ICU_fwd","ncumul_vent_fwd","current_hosp_fwd","current_icu_fwd","current_vent_fwd","ncumul_released_fwd","ncumul_deceased_fwd","ncumul_confirmed_non_resident","current_hosp_non_resident","ncumul_ICF","ncumul_deceased_suspect","TotalPosTests1","ninst_ICU_intub"
"2020-04-15","14:45","AG","",929,"",69,20,20,450,22,"https://www.ag.ch/media/kanton_aargau/themen_1/coronavirus_1/lagebulletins/200415_KFS_Coronavirus_Lagebulletin_33.pdf",0,929,69,20,20,69,20,20,69,20,20,450,22,,,,,,
"2020-04-15","11:00","AI","",24,"","","","","","","https://www.ai.ch/themen/gesundheit-alter-und-soziales/gesundheitsfoerderung-und-praevention/uebertragbare-krankheiten/coronavirus",0,24,"","","",1,0,0,1,0,0,0,0,,,,,,
"2020-04-15","08:00","AR","",79,"","","","","",3,"https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/",0,79,"","","",6,0,0,6,0,0,0,3,,,,,,

Remark: There is no 'totals' available in csv-output.

API for Johns Hopkins University (JHU) (data for world)

Currently not deployed on the Heroku-Server, because of too less memory on this server. If you need this API, deploy it on your own server/laptop. Follow this guideline

Method API Remark Example call
GET /api/doc currently a redirect to this github-readme [https://covid19-rest.herokuapp.com/api/doc]
GET /api/jhu/v1/all read all data [https://covid19-rest.herokuapp.com/api/jhu/v1/all]
GET /api/jhu/v1/country/ read all data for the given country. Alpha-3-Code from ISO-3166 Mapping JHU-country-name to Alpha-3-code [https://covid19-rest.herokuapp.com/api/jhu/v1/country/CHE]
GET /api/jhu/v1/country//area/ read all data for the given country and area. Area is as listed by JHU Province/State But remove all WHITESPACES! [https://covid19-rest.herokuapp.com/api/jhu/v1/country/USA/area/NewYork]
GET /api/jhu/v1/country//area//admin read all data for the given country, area and admin (city) Admin is as listed by JHU Admin2 But remove all WHITESPACES in name! [https://covid19-rest.herokuapp.com/api/jhu/v1/country/USA/area/NewYork/admin/St.Lawrence]

Query parameters

On all calls listed above, you can add optionally the following query-parameters.

Parameter Remark Example call
date= only data for the given date. Format: yyyy-mm-dd [https://covid19-rest.herokuapp.com/api/jhu/v1/country/ITA?date=2020-03-31]
skipRecords=true returns only "totals" and NO "records" [https://covid19-rest.herokuapp.com/api/jhu/v1/all?skipRecords=true]
output=csv output in csv instead of json [https://covid19-rest.herokuapp.com/api/jhu/v1/country/CHN/area/hubei?date=2020-03-23&output=csv]

Output json

{ "totals": { "ncumul_conf": 213372, "ncumul_released": 8474, "ncumul_deceased": 4757 }, "records": [ { "date": "2020-04-01", "country": "US", "countryISO": "USA", "area": "Washington", "admin": "King", "fips": 53033, "lastUpdate": "2020-04-01 21:58:49", "latitude": 47.49137892, "longitude": -121.8346131, "ncumul_conf": 2330, "ncumul_released": 0, "ncumul_deceased": 150 }, { "date": "2020-04-01", "country": "US", "countryISO": "USA", "area": "Washington", "admin": "Snohomish", "fips": 53061, "lastUpdate": "2020-04-01 21:58:49", "latitude": 48.04615983, "longitude": -121.7170703, "ncumul_conf": 1304, "ncumul_released": 0, "ncumul_deceased": 40 } .... ] }

Remark: 'totals' is the sum over your selection-criteria, hence you can get the totals for Korea with /country/KOR or for New York with /country/USA/area/NewYork. If no date-query-parameter is set, the last day is taken to build the sum.

Ouptut csv

"date","country","countryISO","area","admin","fips","lastUpdate","latitude","longitude","ncumul_conf","ncumul_released","ncumul_deceased"
"2020-04-01","US","USA","Washington","King",53033,"2020-04-01 21:58:49",47.49137892,-121.8346131,2330,0,150
"2020-04-01","US","USA","Washington","Snohomish",53061,"2020-04-01 21:58:49",48.04615983,-121.7170703,1304,0,40
"2020-04-01","US","USA","Washington","Unassigned","","2020-04-01 21:58:49",0,0,303,0,0

Remark: There is no 'totals' available in csv-output.

Developers

To enhance / adapt this REST-API follow this steps.

Precondition

Install Node.js on your system. Developed with 12.16.1 LTS, but any not too old version should be fine.

Clone this repo

git clone https://github.com/apfeuti/covid19-rest.git

cd covid19-rest

Install

npm install

Start

npm run start

Open in browser

http://localhost:3000/api/openzh/v1/all

Contribution

Feel free to raise an issue for bugs, feature-requests, improvements, etc. or provide your own pull-request.
Do you like the API? Have critism or something else to say?
Tweet to @APfeuti

Change-Log

Date Topic
2020-04-16 Using v2-data of openZH. See Deprecated fields
2020-04-16 Added query-parameter skipRecords=true
2020-04-07 Added forward-fields, which are never empty
2020-10-19 Added artifical rows for missing days and forward values to this rows (Issue #9)
2020-11-03 Added CORS in response-header