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

Building Google Calendar Service Object w/ Service Account

尽管我正在浏览 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() 方法,然后我可以使用它来post 事件到我的 Google 日历。

知道怎么做吗?在此先感谢您的帮助。

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

发件人:

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

收件人:

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

注:

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

参考:

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