定期的な予定をGoogleカレンダーへ簡単に追加できる仕組みを作ってみた2022.06.02【オンライン】enebular developer meetup
View Slide
自己紹介NearMugi(ニアムギ)普段はねこIoTLTで活動しています。ねこ2匹飼っています。
イントロ今回は「定期的な予定をGoogleカレンダーへ簡単に追加できる仕組みを作ってみた」お話です
イントロ我が家では定期的な予定(例えば子どもの迎えの担当)をGoogleカレンダーを使って家族で共有しています。
イントロそこで妻より・・・・Googleカレンダーの予定をコピーするのが面倒・簡単にコピーできる方法ない?
イントロ確かに手間がかかります・コピーしたい予定をクリック・複製を選択・日付を変更・保存
イントロ簡単に複製する機能はなさそうだったため、作ってみました
仕組みの概要入力を簡単にするため、スプレッドシートにある情報をGoogleカレンダーへ自動で反映させるようにしました一つ一つ予定を入れるよりも楽!
仕組みの概要ただ、スプレッドシートを開いて編集するのも手間なのでAppSheetを使ってLINEから入力できるようにしています。
仕組みの概要全体像はこんな感じです①②③④①LINEからSpreadSheetへ②Cronで定期的に取得③カレンダー情報と比較④カレンダーを更新
Node-RED の部分Node-REDのフローは以下の通りです。1. Googleカレンダーの情報を取得2. スプレッドシートの情報を取得3. 差分(追加/更新/削除)を判別4. Googleカレンダーへ反映
Node-RED の部分1. Googleカレンダーの情報を取得Googleカレンダーへアクセスするノードがありませんでした・・そのためPython + execノードで処理しています
Node-RED の部分(補足)Googleカレンダーにアクセスするソースについて取得(Get)・追加(Insert)・更新(Update)・削除(Delete)を指定するテキストファイルを渡すと、いい感じに処理してくれるプログラムを用意しました1文字目がG の場合はGoogleカレンダーの情報をGetする
Node-RED の部分追加・更新・削除の場合同じように1文字目がI の場合は追加Uの場合は更新Dの場合は削除となります。
Node-RED の部分2. スプレッドシートの情報を取得スプレッドシートはノードがあるので、簡単にデータを取得できます
Node-RED の部分3. 差分(追加/更新/削除)を判別ここが一番の難関でした。判別のルールは以下の通りです。スプレッドシート : o , Googleカレンダー : x -> 追加スプレッドシート : o , Googleカレンダー : o(完全一致) -> スキップスプレッドシート : o , Googleカレンダー : o(一部差分) -> 更新スプレッドシート : x , Googleカレンダー : o -> 削除
Node-RED の部分比較できるようにGoogleカレンダーのデータと、スプレッドシートのデータを整形します取得したGoogleカレンダーのデータこんな感じに整形
Node-RED の部分どのように整形しているかというと、splitノードで1行ずつ読み、jsonata形式でコネコネしてファイルに出力しています
Node-RED の部分スプレッドシートのデータも同様に整形していきます取得したスプレッドシートのデータこんな感じに整形
Node-RED の部分Googleカレンダーと違い、1行目がヘッダーであること、途中に空白行があることに注意して整形します。取得したデータスプレッドシート
Node-RED の部分整形の考え方はGoogleカレンダーとやり方は同じですヘッダーや空白行はスキップします
Node-RED の部分データの形式は揃ったのであとは比較するだけです。
Node-RED の部分整形のときと同じようにsplitノードやchangeノードで比較・・・したかったのですが断念しました・・・日付のあり/なしで追加と削除は出来そうかなと思ったのですが更新を判定するには他の項目(summaryなど)もチェックするのでお手上げでした。
Node-RED の部分そのため、比較用のプログラムを用意して解決しましたPythonでは素直に出来ました
Node-RED の部分4. Googleカレンダーへ反映すでに材料と道具が揃っています。比較した結果をプログラムに渡してあげればOKです。
まとめ・データの読み込み・比較・書き込みといったお勉強のようなシステム 作りでした。・Googleカレンダーのノードがあるといいな。。以上となります。ご清聴ありがとうございました。