GCP (Google Could Platform)JavaScriptNode.js

GoogleカレンダーAPIで、カレンダーリストを作成・取得する (Node.js)

GoogleカレンダーAPIを利用して、複数のカレンダーのデータを参照するケースを想定しています。 このケースでは、対象となるカレンダーのIDなどを定数としてアプリケーション側に持たせるか、データベースへの登録、そしてG […]

広告ここから
広告ここまで

GoogleカレンダーAPIを利用して、複数のカレンダーのデータを参照するケースを想定しています。

このケースでは、対象となるカレンダーのIDなどを定数としてアプリケーション側に持たせるか、データベースへの登録、そしてGoogleカレンダーAPIでの一覧取得などが実装方法として挙がります。

カレンダーの数が増減するケースが考えられるため、今回はGoogleカレンダーAPIを利用しました。

CalendarList APIでリストを管理する

任意のカレンダーリストを管理するには、CalendarList APIを利用します。

ユーザーのカレンダー リスト内のカレンダーのコレクション。

https://developers.google.com/calendar/api/v3/reference/calendarList?hl=ja

更新系のAPIなども利用するため、認証まわりは次のように設定しました。

import {google} from 'googleapis'

const SCOPES = ['https://www.googleapis.com/auth/calendar']
const GOOGLE_PROJECT_ID = 'gcaldemo'

const auth = new google.auth.GoogleAuth({
  keyFile: '/path/to/your-secret-key.json',
  scopes: SCOPES,
  projectId: GOOGLE_PROJECT_ID
})

もし、Insufficient Permissionエラーが出た場合は、SCOPESが'https://www.googleapis.com/auth/calendar.readonlyになっていないか確認しましょう。

CalendarList APIでリストにカレンダーを登録・取得する

登録したいカレンダーのIDを利用して登録しましょう。


    const calendar = google.calendar({
      version: "v3",
      auth: auth
    });
    await calendar.calendarList.insert({
      requestBody: {
        id: GOOGLE_CALENDAR_ID
      }
    })

取得したい場合は、List APIを利用します。

    await calendar.calendarList.list().then(({data}) => data)

リストに登録したカレンダーイベントをまとめて取得するサンプル


    const calendar = google.calendar({
      version: "v3",
      auth: auth
    })

    const calendars = await calendar.calendarList.list().then(({data}) => {
      return data.items.map(item => ({
        id: item.id,
        name: item.summary
      }))
    })

    const events: {
      [calendar_name: string]: calendar_v3.Schema$Event[]
    } = {}

    await Promise.all(calendars.map(async({id, name}) => {
      const response = await  calendar.events.list({
        calendarId: id,
        timeMin: new Date().toISOString(),
        maxResults: 10,
      }).then(res => res.data.items)
      events[name] = response
    }))

    return events

ここまでくると、APIのレスポンスが遅くなるケースが想定されそうです。

S3などのファイルストレージにJSONで配置するか、KVS系のDBにバッチ的に保存する方がよいかもしれません。

Next step

Webhook的に利用できる機能がある・・・様子でした。

Google Calendar API には、リソースの変更を監視できるプッシュ通知が用意されています。この機能を使用して、アプリケーションのパフォーマンスを向上させることができます。

https://developers.google.com/calendar/api/guides/push?hl=ja

次はこれを使って、変更があった時にデータを更新したり通知を出したりする方法を試してみます。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts