所以我正在尝试创建一个新日历,但我希望能够指定创建它的谷歌帐户,假设我拥有所述帐户的凭据,我这样做。下面的代码在当前登录的用户上创建它,或者需要用户交互以允许访问。有没有办法指定用户并在后台运行命令。我基本上只想在程序运行时向我的帐户添加日历,但我不能保证我的帐户将在当时登录。
我相信通过ClientLogin的谷歌api版本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()
答案 0 :(得分:1)
使用V3,您需要使用服务帐户才能充当用户。 Google Drive documentation中描述了该过程,您只需使用Calendar API v3范围和引用,而不是Google Drive API。
答案 1 :(得分:0)
另一种选择是存储OAuth2刷新令牌,并使用它来获取有效的访问令牌,即使用户未登录也是如此。请参阅我对google Calendar api v3 Auth only for first time的回复