他人のカレンダーに予定を追加する
はじめに
家族が使っている別のカレンダーと連携したくて調べてみた。
共有すればいつも通りに"CalendarApp"で操作できそう。
今回は
操作されたい人:いまばりさん
操作したい人:まつやまさん
で試してみる。
操作したい人(まつやまさん)で直接カレンダーをとってきてみる
IDがわかればいける・・・?
そんなことはなかった。。
const CAL_ID = 'XXX@group.calendar.google.com';
const cal = CalendarApp.getCalendarById(CAL_ID);
// null
Logger.log(cal);
共有設定してみる
操作されたい人(いまばりさん)の設定
まず操作されたい人(いまばりさん)のカレンダーを開いて、
「設定」 -> 「マイカレンダーの設定」 -> カレンダー名ふにゃふひゃ
で共有したいカレンダーの設定をひらく。
設定の「カレンダーの設定」 -> 「特定のユーザーまたはグループと共有する」
でユーザーが追加できそうなので、メールアドレスを入れてみる。
権限は編集もしたいので"予定の変更"としてみた。
・・・できた・・・??
できたと思ってもう一度"getCalendarById()"したけどダメだった。
設定はつづく
操作したい人(まつやまさん)の設定
ボケっとしてたらダメだった。
いまばりさんにユーザー追加してもらうとメールが届いた。
メールの本文に"Add this calendar"!!と書いてあったので追加してみる。
そして"getCalendarById()"してみると・・・
・・・できた!!
操作したい人(まつやまさん)操作してみる
お互いの共有設定後はいつも通りの操作で一通りできそう。
取得、追加、削除を試した結果は以下の通り。問題なさそう。
const cal = CalendarApp.getCalendarById(CAL_ID);
Logger.log(cal);
Logger.log(cal.getName());
// 新しい予定を入れる
const title = '新しい予定〜';
const date = new Date('2023/03/17');
const event = cal.createAllDayEvent(title, date);
// 追加した予定が入っていることを確認する
const startTime = new Date('2023/03/17');
const endTime = new Date('2023/03/18');
let events = cal.getEvents(startTime, endTime);
const targetEvent = events.filter(event => event.getTitle() === '新しい予定〜');
// [CalendarEvent]
Logger.log(targetEvent);
// 追加した予定を削除する
targetEvent.map(e => e.deleteEvent());
// 予定が削除されていることを確認する
events = cal.getEvents(startTime, endTime);
// []
Logger.log(events);
まとめ
きっと操作されたい人(いまばりさん)共有設定したらいいんだろうな〜とおもっていたけど、
それだけではなく、共有したカレンダーを操作したい人(まつやまさん)に追加しないとダメだった。
それさえできればあとは使いたい放題〜。
(でもこれ追加せずに使いたいな・・・方法があるのかな。)