使用服务帐户构建 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
。)和运行脚本。
参考:
如果这不是你想要的,我很抱歉。
尽管我正在浏览 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
。)和运行脚本。
- 如果您想使用服务帐户将活动插入您的日历,请将服务帐户的电子邮件作为共享用户之一添加到您的日历。然后,请修改日历ID(在这种情况下,它不是
参考:
如果这不是你想要的,我很抱歉。