Erik Foxcroft
Erik Foxcroft

Reputation: 33

Listing Google calendar events using API

I am trying to write a Google Apps script to modify calendar events so I have modified an example to list events first. When I try debugging this it reports an error that "Calendar is not defined" on the line "events = Calendar.Events.list(calendarId, options);"

I have enabled the advanced calendar API, and am basing my script on one from the Google documentation, so I assume that one worked. Is there anything else I need to do to access the relevant objects and methods?

/*
Adapted from code in https://developers.google.com/apps-script/advanced/calendar
*/
function syncColourCode() {
  var calendarId = CalendarApp.getDefaultCalendar();
  var properties = PropertiesService.getUserProperties();
  var fullSync = properties.getProperty('fullSync');  // sync status is stored in user properties
  var options = {
    maxResults: 100
  };
  var syncToken = properties.getProperty('syncToken'); // pointer token from last sync also stored in user properties
  if (syncToken && !fullSync) {                        // if there is a sync token from last time and sync status has not been set to full sync
    options.syncToken = syncToken; // adds the current sync token to the list of sync options
  } else {
    // Sync events from today onwards.
    options.timeMin = new Date().toISOString(); //change to new Date().toISOString() from getRelativeDate(-1, 0).toISOString()
  }

  // Retrieve events one page at a time.
  var events;
  var pageToken;
  do {
    try {
      options.pageToken = pageToken;
      events = Calendar.Events.list(calendarId, options);
    } catch (e) {

Upvotes: 2

Views: 1824

Answers (3)

Isara Rungvitayakul
Isara Rungvitayakul

Reputation: 508

It seem that Google made some change so that there is no Calendar reference from the AppScript API.

Anyway to get the event you may use this API: CalendarApp.getEvents(startTime, endTime) https://developers.google.com/apps-script/reference/calendar/calendar-app#geteventsstarttime-endtime

Below are my example function running within google sheet.

function listEventsWithinTwoMonth(){
  var calendar = CalendarApp.getDefaultCalendar();  
  var spreadsheet = SpreadsheetApp.getActiveSheet();

  var now = new Date();
  var twoMonthFromNow = new Date(now.getTime() + (24 * 60 * 60 * 30 * 4 * 1000));
  var events = calendar.getEvents(now, twoMonthFromNow);
  if (events.length > 0) {
    // Header Rows
    spreadsheet.appendRow(["#่","id","StartTime","EndTime","Title","Description"]);
    for (i = 0; i < events.length; i++) {
      var event = events[i];
      Logger.log("" + (i+1) + event.getId() +" "+ event.getStartTime()+" "+event.getEndTime()+" "+event.getTitle()+" "+event.getDescription())
      spreadsheet.appendRow([(i+1),event.getId(),event.getStartTime(),event.getEndTime(),event.getTitle(),event.getDescription()]);
    }
  } else {
    Logger.log('No upcoming events found.');
  }
}

Hope this help.

Upvotes: 1

ziganotschka
ziganotschka

Reputation: 26836

CalendarApp.getDefaultCalendar() retrieves an object of the class Calendar that has multiple properties, among others an Id.

To retrieve the calendar Id, you need to define

var calendarId = CalendarApp.getDefaultCalendar().getId();

Upvotes: 0

cdkMoose
cdkMoose

Reputation: 1636

Not a google-apps expert, but from reviewing the code, I see a possible problem. At no point do I see your code checking to see if getDefaultCalendar() actually returned a valid calendar ID. Later your code uses that ID under the assumption that it is good. Have you checked the value of calendarId that is returned?

Sometimes you have to read a little deeper into the message, but I always try to start with trusting the error return. In this case "Calendar is not defined" makes me question the value of calendarId.

Upvotes: 1

Related Questions