カレンダーからMeetのURLを取得する方法 using GAS

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」を使います。

Calendarサービスの追加

これでGoogleカレンダーのAPIにCalendarクラスを通じてアクセスできるようになりました。ただ、このクラスにはCalendarAppのgetEventsForDayのような便利なメソッドは用意されていないので、自身でパラメーターを指定して予定を取得する必要があります。そのあたりの説明は今回は割愛します。

let res = Calendear.Events.list("primary", {
  timeMin: (new Date())
});

こんな感じで Calendar.Events.list メソッドを使って予定を取得します。このサンプルコードの場合、timeMinに現在時刻を指定しているので、現在以降の予定を取得できます。パラメーターの詳しい情報は、Googleのリファレンスを見てみてください。

なお、"primary" はユーザーのメインのカレンダーから取得するという意味の固有キーワードです。

これを実行すると、resitems プロパティに取得された予定が格納されます。

res.items.forEach(item => {
  // MeetのURL
  if (item.conferenceData && item.conferenceData.entryPoints) {
    Logger.log(item.conferenceData.entryPoints[0].uri)
  }
});

本題のMeetのURLは、conferenceDataentryPoints というリストに格納されています。サンプルコードでは、会議設定されていない予定も考慮して、conferenceData プロパティの存在をチェックしてから取得するようにしています。entryPoints の最初が大抵 MeetのURLなのでそのままインデックス0を取得していますが、ちゃんとチェックして取得してもいいと思います。ちなみに1番にはMeetに電話で参加するための電話番号が入っていたりします。