使用服务帐户构建谷歌日历服务对象



尽管我正在浏览Google的文档,但我很难弄清楚如何构建一个服务对象,该对象将允许我通过服务帐户管理我的Google日历。这是我的代码:

SCOPES = ['https://www.googleapis.com/auth/calendar']
SERVICE_ACCOUNT_FILE = 'service_account_credentials.json'
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
CAL = build('calendar', 'v3', credentials=credentials)
EVENT = {
'summary': 'TEST EVENT',
'start': {
'dateTime': '2018-10-24T01:00:00-07:00',
'timeZone': 'America/Denver'
},
'end': {
'dateTime': '2018-10-24T02:00:00-07:00',
'timeZone': 'America/Denver'
}
}
CAL.event().insert(calendarId='primary', body=EVENT).execute()

当我运行此代码时,我被抛出此错误:

Traceback (most recent call last):
File "file.py", line 55, in <module>
CAL.event().insert(calendarId=TEST_CALENDAR, body=EVENT).execute()
AttributeError: 'Resource' object has no attribute 'event'

当我创建 CAL 对象时,它正在创建这种对象:<googleapiclient.discovery.Resource object at 0x00000249A24BB978>,但我假设构建一些其他对象,该对象具有events().insert()方法,然后我可以使用该方法将事件发布到我的 Google 日历。

知道如何做到这一点吗?提前感谢您的帮助。

我认为你的脚本几乎是正确的。但是需要做一些修改。那么这个修改呢?

从:

CAL.event().insert(calendarId='primary', body=EVENT).execute()

自:

CAL.events().insert(calendarId='primary', body=EVENT).execute()

注意:

  • 在脚本中,它使用服务帐户。在这种情况下,primary日历意味着日历的所有者是服务帐户。
  • 当服务帐户将事件插入到primary时,它将插入到服务帐户的日历中。 - 如果要将事件插入到现有日历中,而该日历不是针对服务帐户的,请将服务帐户的电子邮件作为共享用户之一添加到日历中。
    • 如果要使用服务帐户将事件插入日历,请将服务帐户的电子邮件作为共享用户之一添加到您的日历中。然后,请修改日历 ID(在本例中,它不是primary(并运行脚本。

参考:

  • 事件:插入

如果这不是你想要的,我很抱歉。

最新更新