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",但没有提供相关信息。
- 您必须编辑此示例,以便在达到时间限制之前停止执行。
参考:
我指的是
作为此代码
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",但没有提供相关信息。 - 您必须编辑此示例,以便在达到时间限制之前停止执行。