Google Apps 脚本日历服务:如何使用 PropertiesService 存储和检索 CalendarEvents?

Google Apps Script Calendar Service: How to store and retrieve CalendarEvents using PropertiesService?

我指的是

作为此代码

var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var events = cal.getEvents(startTime, endTime);
Logger.log(events);
var sp = PropertiesService.getScriptProperties();
sp.setProperty("events", JSON.stringify(events));
events = JSON.parse(sp.getProperty("events"));
Logger.log(events);

returns:

Info [CalendarEvent, CalendarEvent, CalendarEvent, CalendarEvent, CalendarEvent]
Info [{}, {}, {}, {}, {}]

如何使用 PropertiesService 存储和检索 CalendarEvents(不仅是它们的 ID)?

工作流程:

我认为最好的选择是执行以下操作:

  • 从存储在属性(变量 oldEventIDs)中的先前处理的事件中检索事件 ID。
  • 使用 getEvents(变量 allEvents)检索日历中的所有事件。
  • 过滤日历中的事件,删除属性中已有的事件(变量 newEvents)。
  • 处理完每个新事件后,将事件 ID 附加到 oldEventIDs
  • 在属性中存储 oldEventIDs

代码示例:

var sp = PropertiesService.getScriptProperties();
var oldEventIDs = sp.getProperty("events").split(",");
var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var allEvents = cal.getEvents(startTime, endTime);
var newEvents = allEvents.filter(event => !oldEventIDs.includes(event.getId()));
newEvents.forEach(event => {
  // Event processing
  oldEventIDs.push(event.getId());
});
sp.setProperty("events", oldEventIDs.toString());

备注:

  • 你必须在每次执行时调用 getEvents 无论如何。我看不出将事件存储在 Properties 中如何避免这种情况。这就是您用来从日历中获取事件的方法。无论如何,我认为花费更多时间的是事件 "processing",但没有提供相关信息。
  • 您必须编辑此示例,以便在达到时间限制之前停止执行。

参考: