如何以不同的用户身份登录Google API v3?

时间:2014-04-11 13:51:57

标签: python python-2.7 oauth-2.0 google-api google-calendar-api

所以我正在尝试创建一个新日历,但我希望能够指定创建它的谷歌帐户,假设我拥有所述帐户的凭据,我这样做。下面的代码在当前登录的用户上创建它,或者需要用户交互以允许访问。有没有办法指定用户并在后台运行命令。我基本上只想在程序运行时向我的帐户添加日历,但我不能保证我的帐户将在当时登录。

我相信通过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()

2 个答案:

答案 0 :(得分:1)

使用V3,您需要使用服务帐户才能充当用户。 Google Drive documentation中描述了该过程,您只需使用Calendar API v3范围和引用,而不是Google Drive API。

答案 1 :(得分:0)

另一种选择是存储OAuth2刷新令牌,并使用它来获取有效的访问令牌,即使用户未登录也是如此。请参阅我对google Calendar api v3 Auth only for first time的回复