LoginSignup
4
2

More than 3 years have passed since last update.

兵庫県のCOVID19感染者状況のGraphQL APIを公開してみた。

Last updated at Posted at 2020-03-18

どんなAPIにしたか

3分ごとに
↓↓↓よりエクセルファイルをダウンロードし
https://web.pref.hyogo.lg.jp/kk03/corona_kanjyajyokyo.html
読み込んだデータをDBに書き込みます。
別のコンテナにgraphQLサーバーを用意して配信します。

コンテナ構成

  • DB自動書き込み用コンテナ(pythonで実装)
  • GraphQLサーバー(Goで実装)

ところが、残念ながら...(2020/3/18)

リリース後
定期実行される
pythonが読み込んでいる
エクセルファイルに想定外の変更が
before
スクリーンショット 2020-03-18 17.12.10.png

after
画像の通りなんと空のセルで表現した二重線が追加されてしまいました。
ここに想定外のnullが発生してエラーが発生してしまい。
エクセルのデータをDBに書き込めないという状態になりました。
スクリーンショット 2020-03-18 17.12.24.png

まぁ、担当の方が思いつくままに作っておられるであろうエクセルファイル仕方ありませんね。
なので、残念ながら3月16日までのデータしか提供できない状態となってしまいました。
残念!

修正して公開しなおしました!(2020/3/19)

pythonのcronとgraphQLを組み合わせたサービスの実験に...
くらいのテンションで作ってみたapiだったので
さらっと諦めかけていたのですが
上述のエクセルの空のカラム問題
なんのことは無い
空のカラムは読み飛ばせばいいじゃ無いかという事で
修正したらいけました。

https://hyogo.covid19-api.ga
GraphQLのプレイグラウンドも公開しています。
https://hyogo.covid19-api.ga/playground
一応、ソースコードも
https://github.com/inadati/hyogo-covid19-api.services

Playgroundでapiを試す

エクセルの表のヘッダーとGraphQLのフィールドの関連がこちらです。
スクリーンショット 2020-03-19 13.35.32.png
こんな感じのクエリを投げると...

query{
  readInfectedPeoples{
    no
    confirmed_date
    age_group
    sex
    jurisdiction
    residence
    occupation
    onset_date
    travel_history
    remarks
    infected_places{
      name
      is_relation
    }
  }
}

こんな感じで返ってきます。
エクセルの「認定こども園」以降のカラムはinfected_places(感染場所)でリスト取得できます。
詳しくは、プレイグラウンドのDOCSタブで確認してみてください。

{
  "data": {
    "readInfectedPeoples": [
      {
        "no": 86,
        "confirmed_date": "2020-03-17T00:00:00Z",
        "age_group": 70,
        "sex": "女性",
        "jurisdiction": "伊丹",
        "residence": "伊丹健康福祉事務所管内",
        "occupation": "無職",
        "onset_date": "03月07日",
        "travel_history": "なし",
        "remarks": "介護老人保健施設グリーンアルス伊丹デイケアを利用",
        "infected_places": [
          {
            "name": "認定こども園",
            "is_relation": false
          },
          {
            "name": "北播磨医療センター",
            "is_relation": false
          },
          {
            "name": "グリーンアルス",
            "is_relation": true
          },
          {
            "name": "宝塚第一病院",
            "is_relation": false
          },
          {
            "name": "仁恵病院",
            "is_relation": false
          },
          {
            "name": "介護保険通所事業所",
            "is_relation": false
          },
          {
            "name": "海外渡航者",
            "is_relation": false
          },
          {
            "name": "ライブ関係",
            "is_relation": false
          }
        ]
      },
      ...
    ]
}
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2