为了账号安全,请及时绑定邮箱和手机立即绑定

如果我有日历 ID,则部署脚本以对其他用户的 Google 日历进行更改的最佳方式?

如果我有日历 ID,则部署脚本以对其他用户的 Google 日历进行更改的最佳方式?

素胚勾勒不出你 2022-09-23 09:18:11

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

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

在我在另一个Google帐户上创建测试日历后,我的代码早些时候崩溃了。我将日历切换为公共日历,现在至少按照 getEvents() 文档的指示获得空值。然后,我订阅了该日历,并收到了“例外:不允许操作”。

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

编辑:我不是域名用户,只是使用私人个人谷歌帐户

编辑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:"")});

  

}


查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1484条经验 获得超11个赞

避免将 OAuth 流编码到应用中的一个好方法是将脚本部署为 Web 应用,并使用“应用执行方式为:访问 Web 应用的用户”选项进行部署。

当用户从您的 Web 应用发出请求时,将弹出您的 Web 应用的同意屏幕,并且用户必须给予同意,在此之后,此脚本将以用户身份运行,并可以使用 CalendarApp 将事件添加到其日历中。


查看完整回答
反对 回复 5天前
  • 1 回答
  • 0 关注
  • 2 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信