日历无法取消订阅。请尝试删除

时间:2015-06-09 12:52:18

标签: google-apps-script google-calendar-api

试着了解我是否在这里做错了。

我尝试使用Apps Scripts取消订阅日历,但它不会让我,我收到错误

  

日历test.user@cadillacfairview.com无法取消订阅。请尝试删除。

代码:

function anotherTest(){
  var cal = CalendarApp.getCalendarById('test.user@cadillacfairview.com');
  cal.unsubscribeFromCalendar(); 
}

我不拥有日历,但我确实拥有该日历的权利。 我尝试发布cal.deleteCalendar(),但它说"行动不允许"。

1 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题。似乎Google Apps脚本日历服务会产生这些错误,因为它正在尝试删除实际日历,而不是仅仅取消订阅。

我的工作解决方案涉及直接使用Google Calendar API。

具体方法是CalendarList: delete

从Google日历侧边栏中删除日历列表中的条目,这与“取消订阅”相同。此外,它不是简单地从列表中“隐藏”它,而是完全删除它。

var calendarList = CalendarApp.getAllCalendars();

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

  var calendar = calendarList[i];

  // calendar.unsubscribeFromCalendar(); // results in "...cannot be unsubscribed from. Try deleting instead"
  // calendar.deleteCalendar(); // results in "...Action not allowed"
  // use the actual calendar API instead of Calendar service

  Logger.log('will remove calendar: ' + calendar.getName());

  var url = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + encodeURIComponent(calendar.getId());

  var requestBody                = {};
  requestBody.headers            = { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() };
  requestBody.method             = 'DELETE';
  requestBody.muteHttpExceptions = false;

  try {

    var response = UrlFetchApp.fetch(url, requestBody);

    Logger.log('response: ' + response); // if API call worked, response should be blank

    Logger.log('removed calendar: ' + calendar.getName());

  } catch(e) {

    Logger.log('failed to remove calendar: ' + e.message);

  }

}