Googleカレンダーに登録したイベントの参加者をGASでかんたんに取得する方法を説明します。ソースコードの解説があるのでご自身の環境に合わせて設定を変更することができます。
はじめに
Google Apps Script の GoogleカレンダーAPIを使うと、私達がGoogle カレンダーでできること、例えば
- 予定(プログラムでは「イベント」と呼ぶ)を作成して、参加者を招待する
- 予定の情報にアクセスして予定を参照したり、予定を削除したり
といったことをプログラム上で行うことができます。 GASをうまく使うことで、Googleカレンダーを開かず、予定の作成や参照ができ業務効率を上げることができます。
今回は、予定の参照・ゲストの参照といった基本的な処理を解説します。
ソースコード
main()
がエントリポイント(プログラムの実行の起点)です。
- 期間を指定して、カレンダーのイベントを取得する
- イベント毎に詳細とゲストを表示する
という動きをします。
function main() {
// getEvents を呼び出す際の引数定義(カレンダーイベント取得の開始日、終了日を定義)
// new Date(年, 月, 日) で特定の日付データを作成する。月は 0が1月, 1が2月という仕様である点注意。
const startDate = new Date(2023, 0, 1); // 2023/01/01
const endDate = new Date(2023, 0, 31); // 2023/01/31
const events = getEvents(startDate, endDate);
if(events.length == 0) {
// カレンダーのイベントが何らかの原因で取得できなかった場合の処理
// カレンダーにイベントが登録されていない、イベントは登録されているが権限が適切でなくアクセスできない、など
console.log("カレンダーイベントがありませんでした");
} else {
for(let event of events) {
showEventDetail(event);
showGuests(event);
}
}
}
function getEvents(start, end) {
// メールアドレスを指定して、カレンダーを取得する
const mail = "*************@gmail.com";
const calendar = CalendarApp.getCalendarById(mail);
return CalendarApp.getEvents(start, end);
// ↑↑↑
// 下記の記述は同値
// const events = CalendarApp.getEvents(start, end);
// return events;
}
// イベントの詳細を表示する(プロパティの解説用コード)
function showEventDetail(evnet) {
console.log(event.getId()); // イベントID(URLの文字列とは異なる)
console.log(event.getTitle()); // タイトル
console.log(event.getDescription()); // イベント詳細(未登録の場合は空文字)
console.log(event.getLocation()); // イベントの開催場所(未登録の場合は空文字)
console.log(event.getCreators()); // 作成者
console.log(event.getStartTime()); // 開始時刻
console.log(event.getEndTime()); // 終了時刻
}
// 予定のゲストを表示する
function showGuests(event) {
if(!event) return;
const guests = event.getGuestList();
for (let guest of guests) {
console.log(guest.getName());
}
}
ソースコードの解説
前述の通り、main()
をエントリポイント(プログラムの実行の起点)として、
- 期間を指定して、カレンダーのイベントを取得する
- イベント毎に詳細とゲストを表示する
という動きをします。それぞれ詳細を見ていきましょう。
JavaScriptの日付オブジェクトの生成、月の指定に注意。
カレンダーからイベントを取得するために、開始期間・終了期間のデータを作成しています。
new Date()
ですが、引数に指定した通りの日付データを作成します。
const today = new Date(); // 引数を指定しないと、実行した当日の日付になる
const startDate = new Date(2023, 0, 1); // 2023/01/01、第1引数が年、第2引数が月、第3引数が日
// ↓↓↓ startDateと同じ内容になる。つまり、第4引数以降(時間、分、秒)は省略すると、0になる。
const startDateWithHMS = new Date(2023, 0, 1, 0, 0, 0);
カレンダーとイベントの取得
今回のサンプルコードの肝です。
CalendarApp.getCalendarById
でカレンダーを指定します。類似のメソッドとして、CalendarApp.getDefaultCalendar
があります。
getDefaultCalendar
を使う場合は、現在GASを実行しているユーザーのデフォルトのカレンダーを取得します。
つまり、下記は同値です。
CalendarApp.getCalendarById('自分のgmailアドレス');
CalendarApp.getDefaultCalendar();
また、例えば他人のメールアドレスを指定すると、カレンダーを取得できません。 これはセキュリティの問題です。基本的には、他人のメールアドレスを知ってい るからといって、他人のカレンダーにアクセスすることはできませんよね。 コードでも、同一の動きになります。
function getEvents(start, end) {
// メールアドレスを指定して、カレンダーを取得する
const mail = "*************@gmail.com";
const calendar = CalendarApp.getCalendarById(mail);
return CalendarApp.getEvents(start, end);
// ↑↑↑
// 下記の記述は同値
// const events = CalendarApp.getEvents(start, end);
// return events;
}
ゲストの取得
getGuestList() は、予定の主催者を除く、その予定のゲストを取得する関数です。 関数を実行すると、ゲストの配列を取得できます。
ゲストデータの中身は、下記を参照してください。
まとめ
GASでGoogleカレンダーにアクセスするサンプルを解説しました。
今回のサンプルでわからないことがある場合は、JavaScriptそのものの知識が不足している可能性もあります。 GASの解説記事の他に、JavaScriptの解説も紹介予定ですので、お待ち下さい。