所以我正在尝试创建一个新的日历,但我希望能够指定在哪个谷歌帐户中创建它,假设我有该帐户的凭据,我会这样做。下面的代码在当前登录的用户上创建它,或者需要用户交互才能允许访问。有没有一种方法可以指定用户并在后台运行命令。我基本上只是想在程序运行时给我的帐户添加一个日历,但我不能保证我的帐户届时会登录。
我相信通过ClientLogin使用googleapi的第2版是可能的,但我正在尝试使用第3版。
import gflags
import httplib2
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run
FLAGS = gflags.FLAGS
FLOW = OAuth2WebServerFlow(
client_id='MY_CLIENT_KEY',
client_secret='MY_CLIENT_SECRET',
scope='https://www.googleapis.com/auth/calendar',
user_agent='MyApp/v1')
storage = Storage('calendar.dat')
credentials = storage.get()
if credentials is None or credentials.invalid == True:
credentials = run(FLOW, storage)
http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='calendar', version='v3', http=http)
calendar = {
'summary': 'Test3',
'timeZone': 'America/New_York'
}
created_calendar = service.calendars().insert(body=calendar).execute()
对于V3,您需要使用服务帐户才能充当用户。Google Drive文档中描述了该过程,您只需要使用Calendar API v3范围和引用,而不是Google Drive API。
另一个选项是存储OAuth2刷新令牌,并使用它来获取有效的访问令牌,即使用户没有登录。请参阅我对谷歌日历api v3 Auth的回复,仅限于第一次