かずきち。の日記

サーバサイドエンジニアのつぶやき

新規コロナウイルスの感染者数を東京都のサイトからクロールして、毎日Googleカレンダーに書き込むアプリ(カレンダー)を作成しました!

コロナウイルスの感染者数を毎日記録したい

長年の願望でした。
東京都のコロナウイルス関連のサイトから最新感染者数をスクレイピングして、自動グラフにするのはできました。

スプレッドシートで1日1回外部csvを取り込むことによって東京都のコロナ感染者数を自動で記録していきます。
ここまでは単なるスプレッドシートの作業なので、

=IMPORTDATA("https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv")

の一文を噛ませば実装ができます。
問題は毎日の感染者数をGoogleカレンダーに記録したいのです。
GASのサンプルスクリプトを参考についに完成しました。
完成時間は夜の3:00。
本当にようやくって感じです。

docs.google.com

まずは感染者のデータを1日1回東京都のサイトからクロールして取りに行きます。
次にやりたいことは、この感染者データを1日1日Googleカレンダーに書き込んでいきたいのです。

ここから先は感染者数をカレンダーに書き込む作業を行います
function myFunction() {
  //今日の感染者数を取得
  //開く
  var sheet=SpreadsheetApp.openById('1AZxAuoAQhe8rYgyvpBMDwkVte7kSUQ0z7Z9r8FdV7sY');
  //最終行を取得
  var lastrow = sheet.getRange("A2").getValue();
  Logger.log("行数は"+lastrow);
  
  // そのシートにある B5 のセルを取得
  var day  = sheet.getRange("D"+lastrow);
  var patient = sheet.getRange("E"+lastrow);
  
  // そのセルに表示されている値を取得しログに出力
  Logger.log("日付は"+day.getDisplayValue());  
  Logger.log("患者数は"+patient.getDisplayValue());
  
  //d1c0govfg9tk8tp3p **************@group.calendar.google.com
  
  var calender = CalendarApp.getCalendarById("d1c0govfg9tk8tp3p **************@group.calendar.google.com");
  
  calender.createAllDayEvent(
    "【新規感染者】"+patient.getDisplayValue()+"人"
    , new Date(day.getDisplayValue()) 
  )  
}

感染者数を東京都のサイトから拾ってくる
//今日の感染者数を取得
//開く
var sheet=SpreadsheetApp.openById('1AZxAuoAQhe8rYgyvpBMDwkVte7kSUQ0z7Z9r8FdV7sY');
//最終行を取得
var lastrow = sheet.getRange("A2").getValue();
Logger.log("行数は"+lastrow);

で感染者数を取得します。

あとはGoogleカレンダーに書き込んでいきましょう。
  //d1c0govfg9tk8tp3p **************@group.calendar.google.com
  
  var calender = CalendarApp.getCalendarById("d1c0govfg9tk8tp3p**************@group.calendar.google.com");
  
  calender.createAllDayEvent(
    "【新規感染者】"+patient.getDisplayValue()+"人"
    , new Date(day.getDisplayValue()) 

この意味不明なd1c0govfg9tk8tp3p**************@group.calendar.google.comという文字列はカレンダーに書き込むための魔法のキーになっています。
プライバシーの関係で一部伏せ字にしています。

Googleカレンダーの歯車マークを押すと自分のIDを知ることができますのでここから取得しましょう。
この取得したIDで var calender = CalendarApp.getCalendarById("d1c0govfg9tk8tp3p**************@group.calendar.google.com"); と宣言します。

f:id:kazukichi_0914:20200731102657p:plain

Googleカレンダーのサイドバーの赤枠の部分です。
モザイク処理していますが、ご自身のIDをご使用ください。

そうすると

こんな具合に毎日毎日東京都が感染者数を発表するたびにカレンダーに追記されていきます。
夏休みの自由研究で、コロナウイルスの感染者数推移の日記でも書きたい方にはおすすめです。
3日くらいかかりましたが,やりたいことができて大満足です。
カレンダー追加したい方はカレンダー右下の「+」のボタンからどうぞ。
寝ます。

2020/8/2追記
土日は東京都の発表が遅れるみたいです。

2020/8/5追記
感染者年代別グラフを作成しました。

2020/8/27追記
感染者が増えてきたので、累積感染者数を自然対数の複合グラフにアップデートしました。