Skip to content

Provides a REST-API to get data about COVID19 cases. Data sources are openZH (for detailed figures about Switzerland) and Johns Hopkins University.

License

Notifications You must be signed in to change notification settings

apfeuti/covid19-rest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

COVID19 REST-API

This is a REST-API to get data about COVID19 (new corona-virus) cases. Data sources are Open Data Kanton Zürich (openZH) (for detailed figures about Switzerland) and Johns 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/<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/<country>/area/<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=<yyyy-mm-dd> 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/<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/<country>/area/<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/<country>/area/<area>/admin<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=<yyyy-mm-dd> 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

    About

    Provides a REST-API to get data about COVID19 cases. Data sources are openZH (for detailed figures about Switzerland) and Johns Hopkins University.

    Resources

    License

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Contributors 4

    •  
    •  
    •  
    •