如何在python中使用Google日历API

时间:2013-08-19 06:57:00

标签: python google-calendar-api

我想从我的日历到我的python程序获取事件列表,而且我无法理解我的Google提供的大量oauth文档。

这是我正在尝试的代码。它的半位和peices。任何人都可以帮我解决这个问题

import gflags
import httplib2

from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run
from oauth2client.client import flow_from_clientsecrets


flow = flow_from_clientsecrets('client_secrets.json',
                               scope='https://www.googleapis.com/auth/calendar',
                               redirect_uri='http://example.com/auth_return')

http = httplib2.Http()
http = credentials.authorize(http)

service = build(serviceName='calendar', version='v3', http=http,
       developerKey='AI6456456456456456456456456456yKhI')

events = service.events().list(calendarId='645645654646a2cb4fl164564564@group.calendar.google.com').execute()
print events

问题是如何从流对象中获取凭据

我在API控制台中创建了一个项目,并为其添加了日历API。把它们放在clients.json。

我不想要浏览器重定向和我希望访问的日历。我不希望用户访问他们的日历,而是我的日历,以便我可以在网站上发布我的活动。

我不知道为什么我必须使用Oauth来访问我的日历

1 个答案:

答案 0 :(得分:2)

如果我没弄错,你可以使用v2 api(不建议使用),它允许在没有oAuth的情况下登录。对于v3,这就是我对身份验证流程所具有的功能(注意,我不使用flow_from_clientsecrets):

import gflags
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow

flags = gflags.FLAGS
flow = OAuth2WebServerFlow(
      client_id = 'some_id.apps.googleusercontent.com',
      client_secret = 'some_secret-32ijfsnfkj2jf',
      scope='https://www.googleapis.com/auth/calendar',
      user_agent='Python/2.7')

# to get a link for authentication in a terminal,
# which needs to be opened in a browser anyway
flags.auth_local_webserver = False

# store auth token in a file 'calendar.dat' if it doesn't exist,
# otherwise just use it for authentication
base = os.path.dirname(__file__)
storage = Storage(os.path.join(base, '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,
   developerKey='AI6456456456456456456456456456yKhI')

然后使用service进行通信。请注意,此代码可能缺少某些导入。如果我没记错的话,如果您正在访问主日历,则无需提供日历ID。

我希望它有所帮助。