我想从我的日历到我的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来访问我的日历
答案 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。
我希望它有所帮助。