gdg-fukushima / covid19

福島県公式 新型コロナウイルス感染症情報サイト
https://fukushima-covid19.web.app/
MIT License
32 stars 15 forks source link

データの取得を自動化する #14

Closed donuzium closed 4 years ago

donuzium commented 4 years ago

概要 / Summary:

13 を受けて、データを取得してくる処理を自動化する。

誰が使うか / For whom:

全ユーザー

何のために / For what:

恒常的なデータ更新

どのように実現するか / How:

Firebase Functionsを使って、Firestoreの情報を更新する。

その他の情報 / Other informations:

donuzium commented 4 years ago

半自動化 スクレイピングして、現在の検査件数から増えた数をその日のデータとしてオブジェクトに追加するだけのスクリプト。 特にこれを回しても、データが変わるわけではなくて、ダンプしたJSONを手動でこれまでと同じように更新するというフローです。

https://colab.research.google.com/drive/1SKLvuDbRN0wHVl715h6p6BN6QptGBrn-

donuzium commented 4 years ago

福島県からCSVが公開される場合、Firestoreでなくても外部のjsonファイルを読み込む形にすればいいかなと思いました。

理想的な流れを書きます。

  1. CSVをCloud Functions(for Firebase)で取得する。 これが無料枠では、Googleネットワークから出れないので有料版にする必要がある。

  2. 取得したデータをdata.jsonの形式にしてCloud Storage(for firebase)にストア。 Firestoreなどにデータを格納するよりも、Storageの方が安価かつ高速になるはず。

  3. ウェブページからはストアしたdata.jsonを参照してデータに表示する。

donuzium commented 4 years ago

CSVサンプルが出てきました。 担当の方とのやり取りの中で、まだ公開前だということで、こちらへデータの記載はしません。 正式に公開されたら詳しくお知らせしますが、皆さんの活動で、ついに動いた、ということです。

このIssueに入ります。

hagume commented 4 years ago

こんにちは、栃木県版のcovid19対策サイトを構築しているものです。 https://github.com/covid19-tochigi/covid19 県とのデータ共有に関して検討しているのですが、 donuzimuさん達が取られている方法について詳しく教えていただけませんか? お手数をおかけしますが、宜しくお願いします

donuzium commented 4 years ago

こんにちは!お互いお疲れさまです。 基本的にはまだ話し合っている段階なので、今後変わるかもしれませんが、基本的には「新型コロナウイルス感染症対策に関するオープンデータ項目定義書」をベースにして、その中で公開可能な情報をCSVとして県のサイトにアップロードしてもらうという方針です。

それをdata.jsonの形にするイメージです。

ここからはまだ企画の段階ですが データを定期的にクローリングして、今はビルド時に含まれているdata.jsonを外に出してそのデータを扱うというような設計にする考えでいます。できなければActionsのビルドでデプロイする際に、data.jsonを更新する感じですね。

hagume commented 4 years ago

Shimizuさん

お互い、お疲れ様です! 早速のご返信、ありがとうございます。

オープンデータ項目定義書、ありがとうございます。 現在、栃木チームも県庁に対しデータを共有してほしいコンタクトをしています。 これをベースにアプローチしてみます。

福島の方では、csvファイルの置き場所を県のサイトにする方針なんですね! そうしましたら、webをスクリーピングして、定期的にcsvファイルを取得してdata.jsonに変換する感じ時ですか?

栃木では以下の手順でデータを更新しています。 ・有志らが県サイトを定期的に巡回し、pdfからデータを抽出 ・抽出したデータをgoogleスプレットシートに記入 ・googleスプレットシート をエクセル形式でダウンロードしpythonプログラムでdata.jsonに反映 ・githubへマージしサイト更新

data.jsonはやはり、外して外から反映できる方がいいですよね! でないと県がデータを公開してからサイトに反映されるまでタイムラグがありますよね。

2020年4月8日(水) 16:34 Shun Shimizu notifications@github.com:

こんにちは!お互いお疲れさまです。 基本的にはまだ話し合っている段階なので、今後変わるかもしれませんが、基本的には「新型コロナウイルス感染症対策に関するオープンデータ項目定義書 https://www.code4japan.org/activity/stopcovid19 」をベースにして、その中で公開可能な情報をCSVとして県のサイトにアップロードしてもらうという方針です。

それをdata.jsonの形にするイメージです。

ここからはまだ企画の段階ですが

データを定期的にクローリングして、今はビルド時に含まれているdata.jsonを外に出してそのデータを扱うというような設計にする考えでいます。できなければActionsのビルドでデプロイする際に、data.jsonを更新する感じですね。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/gdg-fukushima/covid19/issues/14#issuecomment-610800828, or unsubscribe https://github.com/notifications/unsubscribe-auth/AO7DUOC74SGUTHWDKRKVKLLRLQSKBANCNFSM4LPJAOZA .

donuzium commented 4 years ago

そうしましたら、webをスクリーピングして、定期的にcsvファイルを取得してdata.jsonに変換する感じ時ですか?

はい。CSVのURLが更新のたびに変わる仕様なので、公開されているサイトをスクレイピングしてcsvを取得します。CSVのURLが固定であれば、直でCSV読込みに行きたいんですけどね。

hagume commented 4 years ago

そうなんですね!

色々と教えていただき、ありがとうございます。 トライしてみます。 また、情報を共有させてください。 2020年4月8日(水) 19:21 Shun Shimizu notifications@github.com:

そうしましたら、webをスクリーピングして、定期的にcsvファイルを取得してdata.jsonに変換する感じ時ですか?

はい。CSVのURLが更新のたびに変わる仕様なので、公開されているサイトをスクレイピングしてcsvを取得します。CSVのURLが固定であれば、直でCSV読込みに行きたいんですけどね。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/gdg-fukushima/covid19/issues/14#issuecomment-610876914, or unsubscribe https://github.com/notifications/unsubscribe-auth/AO7DUOGGAPLCGMV2W33QBJDRLRF3PANCNFSM4LPJAOZA .

y-ishida commented 4 years ago

はじめまして。 @hagume さんと一緒に栃木サイトを運営している者です。スクレイピングのスクリプトを動作させるプラットフォームとしてサーバーレスを考えていらっしゃるようですですが、さくらさんが無料提供の申し出をされているサーバー を使わせてもらうのはどうでしょう? 栃木も有志で活動しているためなるべく費用はかけたくないので、こういったところも活用できるかな、と考えています。

donuzium commented 4 years ago

はじめまして。ありがとうございます。 さくらのクラウドの無償提供の件は検討の中には入っていましたが、CI/CDの運用のしやすさと普段私が主につかてるというところで、今のところはGCPにインフラをまとめようという事になっています。 想定しているスクレイピングの処理は無料枠の中に収まる計算です。

あと、このIssueはデータ取得の自動化についてのIssueなので、インフラについてのコミュニケーションは、また別のIssueなど立てていただいて、そちらにまとめるのが良いかなと思いました!

nozo-moto commented 4 years ago

こんにちは 定期実行をGithub ActionsのSchedule機能で行うのはどうでしょうか? 以下のようなWorkflowを書くと実現できます。

name: Create File
on:
  schedule:
    - cron:  '0/5 * * * *'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: create file
      run: |
        bash create_file.sh
    - name: Commit files
      run: |
        git config --local user.email "action@github.com"
        git config --local user.name "GitHub Action"
        git add .
        git commit -m "Add changes" -a
    - name: Push changes
      uses: ad-m/github-push-action@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}

上記のWorkflowを以下のリポジトリで試しています。 一つの参考と成れば幸いです。 https://github.com/nozo-moto/github_action_cron_for_create_data_and_commit_try