Slide 1

Slide 1 text

定期的な予定をGoogleカレンダーへ 簡単に追加できる仕組みを作ってみた 2022.06.02 【オンライン】enebular developer meetup

Slide 2

Slide 2 text

自己紹介 NearMugi(ニアムギ) 普段はねこIoTLTで活動しています。 ねこ2匹飼っています。

Slide 3

Slide 3 text

イントロ 今回は「定期的な予定をGoogleカレンダーへ 簡単に追加できる仕組みを作ってみた」お話で す

Slide 4

Slide 4 text

イントロ 我が家では定期的な予定(例えば子どもの迎えの担当)を Googleカレンダーを使って家族で共有しています。

Slide 5

Slide 5 text

イントロ そこで妻より・・・ ・Googleカレンダーの予定をコピーするのが面倒 ・簡単にコピーできる方法ない?

Slide 6

Slide 6 text

イントロ 確かに手間がかかります ・コピーしたい予定をクリック ・複製を選択 ・日付を変更 ・保存

Slide 7

Slide 7 text

イントロ 簡単に複製する機能はなさそうだったため、作ってみました

Slide 8

Slide 8 text

仕組みの概要 入力を簡単にするため、スプレッドシートにある情報を Googleカレンダーへ自動で反映させるようにしました 一つ一つ予定を入れるよりも楽!

Slide 9

Slide 9 text

仕組みの概要 ただ、スプレッドシートを開いて編集するのも手間なので AppSheetを使ってLINEから入力できるようにしています。

Slide 10

Slide 10 text

仕組みの概要 全体像はこんな感じです ① ② ③ ④ ①LINEからSpreadSheetへ ②Cronで定期的に取得 ③カレンダー情報と比較 ④カレンダーを更新

Slide 11

Slide 11 text

Node-RED の部分 Node-REDのフローは以下の通りです。 1. Googleカレンダーの情報を取得 2. スプレッドシートの情報を取得 3. 差分(追加/更新/削除)を判別 4. Googleカレンダーへ反映

Slide 12

Slide 12 text

Node-RED の部分 1. Googleカレンダーの情報を取得 Googleカレンダーへアクセスするノードがありませんでした・・ そのためPython + execノードで処理しています

Slide 13

Slide 13 text

Node-RED の部分 (補足)Googleカレンダーにアクセスするソースについて 取得(Get)・追加(Insert)・更新(Update)・削除(Delete)を指定する テキストファイルを渡すと、いい感じに処理してくれるプログラムを用意しました 1文字目がG の場合は Googleカレンダーの情報をGetする

Slide 14

Slide 14 text

Node-RED の部分 追加・更新・削除の場合 同じように1文字目が I の場合は追加 Uの場合は更新 Dの場合は削除 となります。

Slide 15

Slide 15 text

Node-RED の部分 2. スプレッドシートの情報を取得 スプレッドシートはノードがあるので、簡単にデータを取得できます

Slide 16

Slide 16 text

Node-RED の部分 3. 差分(追加/更新/削除)を判別 ここが一番の難関でした。 判別のルールは以下の通りです。 スプレッドシート : o , Googleカレンダー : x -> 追加 スプレッドシート : o , Googleカレンダー : o(完全一致) -> スキップ スプレッドシート : o , Googleカレンダー : o(一部差分) -> 更新 スプレッドシート : x , Googleカレンダー : o -> 削除

Slide 17

Slide 17 text

Node-RED の部分 比較できるようにGoogleカレンダーのデータと、スプレッドシートのデータを整形しま す 取得したGoogleカレンダーのデータ こんな感じに整形

Slide 18

Slide 18 text

Node-RED の部分 どのように整形しているかというと、splitノードで1行ずつ読み、jsonata形式でコネコ ネしてファイルに出力しています

Slide 19

Slide 19 text

Node-RED の部分 スプレッドシートのデータも同様に整形していきます 取得したスプレッドシートのデータ こんな感じに整形

Slide 20

Slide 20 text

Node-RED の部分 Googleカレンダーと違い、1行目がヘッダーであること、途中に空白行があることに注 意して整形します。 取得したデータ スプレッドシート

Slide 21

Slide 21 text

Node-RED の部分 整形の考え方はGoogleカレンダーとやり方は同じです ヘッダーや空白行はスキップします

Slide 22

Slide 22 text

Node-RED の部分 データの形式は揃ったのであとは比較するだけです。

Slide 23

Slide 23 text

Node-RED の部分 整形のときと同じようにsplitノードやchangeノードで比較・・・ したかったのですが断念しました・・・ 日付のあり/なしで追加と削除は出来そうかなと思ったのですが 更新を判定するには他の項目(summaryなど)もチェックするので お手上げでした。

Slide 24

Slide 24 text

Node-RED の部分 そのため、比較用のプログラムを用意して解決しました Pythonでは素直に出来ました

Slide 25

Slide 25 text

Node-RED の部分 4. Googleカレンダーへ反映 すでに材料と道具が揃っています。比較した結果をプログラムに渡してあげればOKです。

Slide 26

Slide 26 text

まとめ ・データの読み込み・比較・書き込みといったお勉強のようなシステム  作りでした。 ・Googleカレンダーのノードがあるといいな。。 以上となります。 ご清聴ありがとうございました。