[GoogleAppsScript] GoogleCalendarの予定に埋まっているZoomのURLを取る方法
概要
Google Calendar を Zoom の Add-on で連携している場合に設定された Zoom のミーティング URL を API 経由で取得したかった。
Google App Script の Calendar の CalendarEvent クラスのメソッドでは不可能。
REST API を用いて、イベントの conferenceData を取得する必要があります。
事の起こりは...
設定した MTG を一覧にして、それを Web で (HTML 形式で) 公開したい、ということで、既存のカレンダーに設定された MTG から タイトル、URL、パスコード等を取得しようと思ったのでした。
とりあえずこうしてみるよね
function myFunction() {
const events = CalendarApp.getDefaultCalendar().getEventsForDay(new Date());
console.log(events[0].getLocation());
}
ところが手動で MTG 場所として設定された URL は取れるものの、 Add-on で設定された URL は取れなかったのでした。
ちなみに Add-on で設定されるとこんな感じになります。
それっぽい関数はないかと見てみるものの
なさそうです。
CalendarEvent のリファレンス を見てもなさそう。
ちなみに、getAllTagKeys()
を使うと、 meetingId
, meetingParams
というのが取れるので、 getTag("meetingParams")
してみましたが、下記のようなデータしか取れませんでした
{"topic":"テスト","type":2,"start_time":"2021-07-07T17:00:00+09:00","duration":30,"timezone":"Asia/Tokyo"}
調べてみると
標準では Google Meet が使えるので、その場合の Hangout の URL はそもそもどこに入っているのかを調べましたがやはり meetingParams 等に入っているわけではなかったです。
ぐぐるしかないです。
calendar api hangout url
でぐぐってみました。
見つかったのは Events | Calendar API | Google Developers です。
ここには hangoutLink
というのもありますが、 conferenceData
というのが入っており、どうやらこれが本命のようです。
function myFunction() {
const calendarId = "xxxxxxx@gmail.com";
Calendar.Events.list(calendarId, {});
}
とすれば良さそうですが、この時点で Calendar.Events
とかで補完が効いてくれません。
サービスの追加
このようにサービスとして Calendar API を組み込む必要がありました。
Calendar.Events.list(calendarId, {})["items"].forEach( (event) => {
console.log(Calendar.Events.get(calendarId, event.getId()));
});
あとは list で取得して正常取得した場合にはレスポンスに items
が含まれるので、上記のようにしたら
// 一部省略
{
htmlLink: '****',
description: '***',
id: '***',
status: 'confirmed',
summary: 'タイトル',
conferenceData:
{
entryPoints: [ [Object], [Object], [Object] ],
}
}
conferenceData.entryPoints
の中に必要なデータが入っているのでそれを取得すれば良いです。
なお list メソッドにパラメータを与えないと最初から100件とかを取ってしまうのでご注意ください。
timeMin
とかを与えると良いと思います。
Discussion