Google App Script (GAS) でカレンダーの予定に関連付けられたMeetのURLを取得したい。
CalendarApp
とりあえずカレンダーの操作といえばCalendarAppクラスが定番なので、試してみました。
CalendarApp.getEventsForDay(new Date()).forEach(event => {
// ここでeventを確認
});
こんな感じで今日の予定を取得すれば、event変数にMeetのURLくらい入ってるだろうと思ったのが甘かった。時間やタイトルなどは取得できるが、そのほかには大した情報が取得できませんでした。
Calendarサービス
GASでは標準で読み込まれているCalendarAppなどとは別に、さまざまな「サービス」の参照を追加できるようになっています。GASでのサービスとは、GoogleのさまざまなAPIに対するラッパーになっているクラスを意味します。
今回は、サービスの中から「Celendar」を使います。
これでGoogleカレンダーのAPIにCalendarクラスを通じてアクセスできるようになりました。ただ、このクラスにはCalendarAppのgetEventsForDayのような便利なメソッドは用意されていないので、自身でパラメーターを指定して予定を取得する必要があります。そのあたりの説明は今回は割愛します。
let res = Calendear.Events.list("primary", {
timeMin: (new Date())
});
こんな感じで Calendar.Events.list
メソッドを使って予定を取得します。このサンプルコードの場合、timeMin
に現在時刻を指定しているので、現在以降の予定を取得できます。パラメーターの詳しい情報は、Googleのリファレンスを見てみてください。
なお、"primary"
はユーザーのメインのカレンダーから取得するという意味の固有キーワードです。
これを実行すると、res
の items
プロパティに取得された予定が格納されます。
res.items.forEach(item => {
// MeetのURL
if (item.conferenceData && item.conferenceData.entryPoints) {
Logger.log(item.conferenceData.entryPoints[0].uri)
}
});
本題のMeetのURLは、conferenceData
の entryPoints
というリストに格納されています。サンプルコードでは、会議設定されていない予定も考慮して、conferenceData
プロパティの存在をチェックしてから取得するようにしています。entryPoints
の最初が大抵 MeetのURLなのでそのままインデックス0
を取得していますが、ちゃんとチェックして取得してもいいと思います。ちなみに1
番にはMeetに電話で参加するための電話番号が入っていたりします。