Posted at

Google Apps Script で Calendar を扱うときの書き方


trigger となる event source を From Calendar にしたときの引数

(言語設定を変えるの面倒なので、 event source とか From Calendar の日本語名が分かる人教えてください)

例として、実行される function を

function doFromCalendarUpdated(args) {

}

のようにしてみる。

trigger の設定画面で、こうやって



  • Choose which function to run: (前述の) doFromCalendarUpdated


  • Select event source: From calendar

  • (ちなみに Calendar owner email には、 calendar id を入れればよい。)

スクリーンショット 2019-06-09 14.32.06.png

このとき args には、

{"calendarId": "xxxx", "authMode": "FULL", "triggerUid": "xxxx"}

が入っている。 CalendarId は分かるが、なんの変更があったかは分からないっぽい。


Permission

Script が所属するプロジェクト1が Calendar のデータにアクセスすることを許可しないといけない。

設定していない場合、


The script does not have permission to perform that action.

Required permissions: (https://www.googleapis.com/auth/calendar || https://www.googleapis.com/auth/calendar.readonly || https://www.google.com/calendar/feeds)


というエラーが出る。 Trigger で実行する前にテストで実行したりして許可しないといけない


カレンダーのイベントを検索

過去24時間のイベントを検索するコード例

function doFromCalendarUpdated(args) {

if (!args || !args.calendarId) {
Logger.log("No arguments");
return;
}
handleCalendar(args.calendarId);
}

var handleCalendar = function(calendarId) {
var calendar = CalendarApp.getCalendarById(calendarId);
var endTime = new Date();
var startTime = new Date(endTime.getTime() - 24 * 60 * 60 * 1000);

var events = calendar.getEvents(startTime, endTime);

var event;
for (var i = 0, l = events.length; i < l; i++) {
event = events[i];

// この event の使い方は
// https://developers.google.com/apps-script/reference/calendar/calendar-event
// を参照

// たとえばイベント名をログ出力するには
Logger.log(event.getTitle());
}
}

テストするには

function testHandleCalendar() {

var email = Session.getActiveUser().getEmail();

handleCalendar(email);
}

とかやればいいはず





  1. script を作れば勝手にプロジェクトが作られてると考えても差し支えないと思います。