无法更新日历事件:请求错误

Unable to update calendar event: bad request

我正在尝试更新 google 日历中的日历事件。我的代码目前如下:

function changeVisibilityForTwoWeeks() {
  var calendarId = 'primary';
  var now = new Date();
  var inTwoWeeks = new Date();
  inTwoWeeks.setDate(new Date().getDate()+14);


  var events = Calendar.Events.list(calendarId, {
    timeMin: now.toISOString(),
    timeMax: inTwoWeeks.toISOString(),
    singleEvents: true,
    orderBy: 'startTime'
  });
  if (events.items && events.items.length > 0) {
    for (var i = 0; i < events.items.length; i++) {
      var event = events.items[i];
        if (event.organizer.email.endsWith("@somedomain.com"))
        ) {
          event.setVisibility(CalendarApp.Visibility.PRIVATE); 
          event = Calendar.Events.update(event, calendarId, event.getId());
        }
  }} 
}

我得到的只是 GoogleJsonResponseException:API 调用 calendar.events.update 失败,出现错误:错误请求

有什么错误的建议吗?

谢谢!

当您尝试使用 Calendar.Events.update, you passed a complete Events resource 作为请求更新活动时 body。

请注意Events resource are writable when using Calendar.Events.update. Refer to the list of required and optional properties that could be modified/updated using Calendar.Events.update method in the Request body中的参数并非全部:

(不完整列表)

示例代码:

if (events.items && events.items.length > 0) {
    for (var i = 0; i < events.items.length; i++) {
      var event = events.items[i];
        if (event.organizer.email.endsWith("@somedomain.com"))
        {
          var updateEvent = {
            start: {
              dateTime: event.start.dateTime
            },
            end: {
              dateTime: event.end.dateTime
            },
            visibility: "private"
          };
          
          Logger.log(updateEvent);
          event = Calendar.Events.update(updateEvent, calendarId, event.getId());
        }
  }} 

之前:

之后:


重要提示:

我特意没有包括其他可选参数,以向您展示如果您没有将旧事件中的其他参数复制到更新事件中,它仍然会在您使用 Calendar.Events.update 时更新。请注意,标题未设置。

因此,请确保将必要的 information/properties 从您的旧事件复制到更新后的事件,并确保它基于 Calendar.Events.update Request body

是可写的

备选方案:

正如 OP 在评论部分提到的,您可以使用 Calendar.Events.patch 来更新您想要的属性。您未在请求中指定的字段保持不变。