如果我有calendarID,最好的部署脚本的方式来更改其他用户的Google日历?

问题描述 投票:0回答:1

我现在有一个工作表绑定脚本,该脚本读取电子表格数据并基于工作表创建日历事件。该电子表格还存储其他用户的日历ID(我不拥有),而我正尝试为其读取/写入其Google日历。

我的理想用法是,一个用户可以为所有存储的用户触发脚本,或者每个用户都可以单击该脚本并将其事件添加到指定的日历中,但是我发现我什至无法仅凭其他权限访问其他人的日历他们的calendarID。

我在其他Google帐户上创建测试日历后,我的代码崩溃了。我将日历切换为公共日历,现在至少变得空了,如getEvents()文档所指示。然后,我订阅了该日历,并收到了“例外:不允许采取行动”。

我遇到了OAuth2,觉得这是我需要以某种方式实现的东西,但是我不确定该如何处理。 我是否可以通过脚本对多个用户的日历进行更改,或者我需要了解Web应用程序,是否可以通过某种方式访问​​其他人的日历?

编辑:我不是域用户,仅使用私人Google个人帐户

Edit 2:还发现附件是一回事。要阅读有关的内容

/**
Function to add shift details to user's calendar
@param{object} user-object with keys of column header's of user-info sheet 
(name, email, year, calName, calID, early, late)
@param{object} eventDetails - an object with keys created after interpreting shift codes 
(title, start, end, location, desscription, problem, pdate, pvalue)
*/
function addToCalendar(user, eventDetails){
  var calendar = CalendarApp.getCalendarById(user.calID);
  if(calendar == null){
    Logger.log(user.name); //testing code, realized I couldn't accesss other's calIDs here
  }
  var existingEvents = calendar.getEvents(eventDetails.start, eventDetails.end);
  if(existingEvents.length>0){
    if(existingEvents[0].getTitle() == eventDetails.title){
      Logger.log("ALREADY CREATED!!");
      return;
    }
  }
  calendar.createEvent(eventDetails.title, eventDetails.start, eventDetails.end, 
                       {description : (eventDetails.description ? eventDetails.description:""),
                        location: (eventDetails.location ? eventDetails.location:"")});
  
}
javascript google-apps-script oauth-2.0 google-calendar-api
1个回答
0
投票

也许避免将OAuth流编码到您的应用程序中的一种好方法是将脚本作为Web app部署,并通过选择“将应用程序执行为:用户访问Web应用程序”]进行部署。] >

[当用户从您的Web应用程序发出请求时,将弹出Web应用程序的同意屏幕,并且用户必须征得同意,此后,此脚本将以用户身份运行,并可以使用CalendarApp将事件添加到他们的日历中。

© www.soinside.com 2019 - 2024. All rights reserved.