Google Calendar APIでカレンダーに登録されたイベントを編集するにあたってeventIdが必要なのですが、その取得に手間取ったので、その備忘録です。
Google APIの使用に当たっては有効なgapi.clientが使用できることを前提とします。
- OAuth2.0でrefresh_tokenを取得してGoogle APIにアクセス(refresh_token, access_tokenの取得まで)
- OAuth2.0でrefresh_tokenを取得してGoogle APIにアクセス(access_tokenでAPIにアクセス)
eventIdをカレンダーイベントから取得する
ブラウザ上で取得
ブラウザのGoogle Calendarアプリ上で編集可能なイベントを開き、編集ボタンを押すと、編集画面が表示されます。この時のアドレスバー内のeventedit/以下の?tabまでの長い文字列を記録しておきます。
この文字列はeventIdとcalendarIdをBase64 符号化したものになるので、デコードしてeventIdを取得します。atob()でデコードすると、eventIdとcalendarIdがスペース区切りで出力されます。
> atob('{eventedit/以下、?tabまでの長い文字列}')
"{eventId} {calendarId}" // 実行結果
let eventId = atob('{eventedit/以下、?tabまでの長い文字列}').split(' ')[0]
APIで取得するイベントから取得
APIで取得するイベント内にはeventIdというプロパティは存在しません。eventIdはhtmlLinkから見つけ出す必要があります。
// APIでイベントリストを取得
let events = await gapi.client.calendar.calendarList.list().then(({result})=>{
return result.items
})
// 上記のeventsに含まれる各イベントの一部
{
...
htmlLink: "https://www.google.com/calendar/event?eid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
...
}
let eid = htmlLink.split('?eid=').slice(-1)[0] // eventIdとcalendarIdをBase64 符号化した文字列
let eventId = atob(eid).split(' ')[0]
イベントの編集
gapi.client.calendar.events.updateを用いることでイベント内容を更新することが出来ます。updateではイベントを登録するのに必要な情報をすべて指定する必要があります。一部の変更だけを適用したい場合はgapi.client.calendar.events.patchで行うことが出来ます。
gapi.client.calendar.events.update({
calendarId: 'primary',
eventId: '{eventId}',
resource: {
summary: 'test' // イベントの名前をtestに変更,
start: {date: '2021-01-29'},
end: {date: '2021-01-30'}
}
})
コメント