2020-03-12
東京都版のGitHub公開後、エンジニアが多数集まり、北海道版大阪府版愛知県版など、横展開が急速に進んでいます。学生の活躍も増えてきてうれしい限り!簡易版「COVID-19 Japan - 日本 新型コロナウイルスオープンデータサマリー」を使って、京都版も誕生!全国網羅されるのも時間の問題かも?

自分のまちのサイトがないから作りたい!そんな時の手順はこちら。
1. 都道府県名 + オープンデータ で検索(都道府県、全部オープンデータサイトはある)
2. オープンデータカタログで、新型コロナウイルス、COVID-19 などで検索し、あった → アプリづくり!
3. なければ、都道府県名 + 新型コロナウイルス で検索し、情報掲載サイトを見つけ、スクレイピングしてAPI化 → アプリづくり!

実家がある石川県でやってみました。
1. 「石川県/石川県オープンデータカタログ」を発見
2. 新型コロナウイルスデータはまだなさそう
3. 「石川県/新型コロナウイルス感染症の県内の患者発生状況」からスクレイピングしてAPI化 → 簡易アプリ化!


COVID-19 Ishikawa - 石川県 新型コロナウイルスオープンデータサマリー
検査人数は不明ですが、現在、陽性患者数7名とのこと。1時間おきにデータをチェックし、差分があれば更新し、APIにも反映されるように作っています。

const parseDate = function(s) { const num = s.match(/令和(\d+)年(\d+)月(\d+)日.+/) const y = 2018 + parseInt(num[1]) const m = parseInt(num[2]) const d = parseInt(num[3]) return y + "-" + fix0(m, 2) + "-" + fix0(d, 2) } const parseData = function(s) { if (s == null) return null let cnt = 0 let idx = 0 for (let idx = 0;;) { const n = s.indexOf('例目', idx) if (n < 0) break cnt++ idx = n + 2 } if (!cnt) return null return { date: parseDate(s), npatients: cnt } } const getCovid19DataJSON = async function() { const data = await getCovid19Data() const dom = cheerio.load(data) const daily = [] dom('h2').each((idx, ele) => { const text = ele.children[0].data const d = parseData(text) if (d) daily.push(d) }) const res = { npatients: daily } res.summary = calcCovid19DataSummary(res) res.lastUpdate = getLastUpdate() return res }

コアになる部分の Node.js のプログラムはこんな感じです。HTML解析用ライブラリ cheerio を使って、h2タグで囲われているところをチェックし、正規表現を使って切り出してデータ化してます。詳細は covid19ishikawa.js を見ると書いてありますが、実際動かしたりしてみるのが一番です。

GitHubの app_sabae_cc のソースを Clone or download して、コンソールから下記コマンドで動かせます。

npm install node covid19ishikawa.js

コンソールって何?エラーが出でよくわからない方は、こちらからどうぞ!
コンピューターと深く話そう! Macのターミナル入門とNode.jsでつくるwebサービスはじめのいっぽ

APIができたら、次はアプリづくり!
ひとまず簡易版対策サイトならデータを入れ替えてちょっと調整するだけでお手軽です!
どんどん改良するも良し、東京都版の横展開にチャレンジするも良し!

完成したら、ハッシュタグ #StopCOVID19JP 付きで発信しましょう!
うまく行かないときのご相談あれば、@taisukef 宛メンションツイートでどうぞ!

links
- 東京都 新型コロナウイルス対策サイトへの貢献方法を解説 - Qiita
- 求む協力者、高専生がReactで開発した学生のための民間支援情報ナビ、データとアプリの分離が多様性の鍵!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS