如何检索Google日历活动的扩展属性?

时间:2015-10-03 02:37:06

标签: javascript google-apps-script google-sheets google-calendar-api extended-properties

我有几个扩展属性,我已经使用PHP添加到各种事件中。现在,我想使用Google表格中的Google Apps脚本检索它们。我可以访问日历,所有事件和标准数据元素,如下所示:

 var mycal = "... my calendar id ....";
 var cal = CalendarApp.getCalendarById(mycal);

 var events = cal.getEvents(new Date("January 12, 2015 00:00:00 CST"), new Date("January 18, 2017 23:59:59 CST"))

 for (var i=0; i < events.length; i++) {

      var myStart = events[i].getStartTime();
      var myTitle = events[i].getTitle();
      var myDesc = events[i].getDescription();
      var myTalkNo = ??

 }

如何在每个事件上查询名为“talk-number”的私有扩展属性?

1 个答案:

答案 0 :(得分:1)

在Google Apps脚本中,您有两种与Google日历互动的方式;必须通过高级Google服务启用的Calendar ServiceAdvanced Calendar Service(又名日历API)。

ACS使用Google Calendar API中的资源表示,因此extendedProperties可作为您可以通过API获取的事件对象的一部分。

以下是ACS文档中示例的简单修改,它将记录每个具有一个事件的事件的“对话号码”。

function listNext10Events() {
  var calendarId = 'primary';
  var now = new Date();
  var events = Calendar.Events.list(calendarId, {
    timeMin: now.toISOString(),
    singleEvents: true,
    orderBy: 'startTime',
    maxResults: 10
  });
  if (events.items && events.items.length > 0) {
    for (var i = 0; i < events.items.length; i++) {
      var event = events.items[i];
      if (event.start.date) {
        // All-day event.
        var start = parseDate(event.start.date);
        Logger.log('%s (%s)', event.summary, start.toLocaleDateString());
      } else {
        var start = parseDate(event.start.dateTime);
        Logger.log('%s (%s)', event.summary, start.toLocaleString());
      }
      /********************************************************************/
      if (event.hasOwnProperty("talk-number"))
        Logger.log(event.extendedProperties.private["talk-number"]);
      /********************************************************************/
    }
  } else {
    Logger.log('No events found.');
  }
}

您可以使用以下方式更新您的功能:

var eventId = events[i].getId().replace(/@.*/,'');  // Remove @google.com from eventId
var event = Calendar.Events.get(calendarId, eventId)
myTalkNo = event.extendedProperties.private["talk-number"];