Node.jsで、特定のGoogleカレンダーに登録されたイベント情報を取得する
LINE botなどで、Googleカレンダーに登録した予定一覧を取得するコードの実装に挑戦しましたので、その覚書です。 Google APIの設定(リンク紹介のみ) Googleカレンダーの情報をAPIから取得するには […]
広告ここから
広告ここまで
目次
LINE botなどで、Googleカレンダーに登録した予定一覧を取得するコードの実装に挑戦しましたので、その覚書です。
Google APIの設定(リンク紹介のみ)
Googleカレンダーの情報をAPIから取得するには、Google Cloudアカウントが必要です。
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のモジュールとして抽象化しておこうかなと思います。