Node.jsで、特定のGoogleカレンダーに登録されたイベント情報を取得する

LINE botなどで、Googleカレンダーに登録した予定一覧を取得するコードの実装に挑戦しましたので、その覚書です。 Google APIの設定(リンク紹介のみ) Googleカレンダーの情報をAPIから取得するには […]

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

目次

    LINE botなどで、Googleカレンダーに登録した予定一覧を取得するコードの実装に挑戦しましたので、その覚書です。

    Google APIの設定(リンク紹介のみ)

    Googleカレンダーの情報をAPIから取得するには、Google Cloudアカウントが必要です。

    https://cloud.google.com/?hl=ja

    APIにアクセスするための情報は、「サービスアカウント」の「キー」にてJSONファイルを出力させています。

    キーの作成方法などは、ライブラリのREADMEファイルなどを参考に作業しています。

    なお、まだ手順を言語化できていませんので、ここでは具体的な手順については割愛します。

    npmのライブラリを追加する

    googleapisライブラリをインストールします。

    googleapiは別物ですので、タイポに注意しましょう。

    % npm i googleapis

    認証の設定を行う

    APIを呼び出すための設定は、次のように実装しました。

    import {google} from 'googleapis'
    
    const SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
    const GOOGLE_PROJECT_ID = 'gcaldemo'
    
    const auth = new google.auth.GoogleAuth({
      keyFile: '/path/to/your-secret-key.json',
      scopes: SCOPES,
      projectId: GOOGLE_PROJECT_ID
    })

    カレンダーAPIから予定を取得する

    あとはライブラリからAPIを呼び出すだけです。

        const calendar = google.calendar({
          version: "v3",
          auth: auth
        });
        const res = await calendar.events.list({
          calendarId: GOOGLE_CALENDAR_ID,
          timeMin: new Date().toISOString(),
          maxResults: 10,
          orderBy: 'startTime',
        })

    レスポンスはaxiosと似たオブジェクト構造に見えました。

    アプリ側で使わないデータの除去などを行う処理を追加します。

    
        const {
          summary,
          description,
          timeZone,
          updated,
          items
        } = res.data;
    
        const events = items.map(({
          id,
          updated,
          summary,
          organizer: {
            displayName
          },
          start: {
            date: startDate,
          },
        }) => ({
          id,
          lastUpdated: updated,
          displayName,
          startDate,
          summary
        }))

    Next Step

    とりあえずユーザーに見せたいデータのJSONを作る部分まではできました。

    LINE botやウェブサイトなどで使えればと思いますので、Nestのモジュールとして抽象化しておこうかなと思います。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark