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

时间:2018-10-24 19:22:06

标签: python google-calendar-api service-accounts

在浏览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日历。

关于如何做到这一点的任何想法?预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

发件人:

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

收件人:

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

注意:

  • 在您的脚本中,它使用服务帐户。在这种情况下,日历primary表示日历的所有者是服务帐户。
  • 当服务帐户将事件插入primary时,事件将被插入服务帐户的日历中。 -如果要将事件插入服务帐户以外的现有日历中,请以共享用户之一的身份将服务帐户的电子邮件添加到日历中。
    • 如果要使用服务帐户在日历中插入事件,请以共享用户之一的身份将服务帐户的电子邮件添加到日历中。然后,请修改日历ID(在这种情况下,它不是primary。)并运行脚本。

参考:

如果这不是您想要的,对不起。