見出し画像

他人のカレンダーに予定を追加する

はじめに

家族が使っている別のカレンダーと連携したくて調べてみた。
共有すればいつも通りに"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);

まとめ

きっと操作されたい人(いまばりさん)共有設定したらいいんだろうな〜とおもっていたけど、
それだけではなく、共有したカレンダーを操作したい人(まつやまさん)に追加しないとダメだった。
それさえできればあとは使いたい放題〜。
(でもこれ追加せずに使いたいな・・・方法があるのかな。)

参考

【GAS】他人のGoogleカレンダーに予定を登録する方法 - Zenn

いいなと思ったら応援しよう!