Google Calendar APIでeventIdを取得し、イベントを編集する

技術備忘録

Google Calendar APIでカレンダーに登録されたイベントを編集するにあたってeventIdが必要なのですが、その取得に手間取ったので、その備忘録です。

Google APIの使用に当たっては有効なgapi.clientが使用できることを前提とします。


スポンサーリンク

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'}
    }
})

参考ページ

How can I find the Event Id of my Google Calendar event?

コメント

タイトルとURLをコピーしました