自分のまちのサイトがないから作りたい!そんな時の手順はこちら。
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で開発した学生のための民間支援情報ナビ、データとアプリの分離が多様性の鍵!