1
我正在使用python和appengine創建使用Google Calendar API(V3)的應用程序。使用Calendar v3 api python插入事件時出現HttpError 401「需要登錄」
我可以列出來自多個日曆等的事件。但是,我試圖將事件插入日曆時遇到問題。如果我在我的處理程序中使用get(),一切工作正常(即。事件插入正確。但是,如果我使用表單和post()插入事件(在同一日曆中)它失敗,與以下消息
<HttpError 401 when requesting https://www.googleapis.com/calendar/v3/calendars/.../events?alt=json returned "Login Required">
Traceback (most recent call last):
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
rv = self.handle_exception(request, response, e)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
rv = self.router.dispatch(request, response)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
return route.handler_adapter(request, response)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch
return self.handle_exception(e, self.app.debug)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
File "/base/data/home/apps/.../oauth2client/appengine.py", line 469, in check_oauth
return method(request_handler, *args, **kwargs)
File "/base/data/home/apps/...", line 99, in post
request = service.events().insert(calendarId='MyCalendarId', body=event).execute()
File "/base/data/home/apps/.../apiclient/http.py", line 678, in execute
raise HttpError(resp, content, uri=self.uri)
HttpError: <HttpError 401 when requesting https://www.googleapis.com/calendar/v3/calendars/.../events?alt=json returned "Login Required">
的功能簡化版本得到()和post()低於:
class AddEvent(webapp2.RequestHandler):
@decorator.oauth_required
def post(self):
if decorator.has_credentials():
#event_name = self.request.get('event-name')
event = {
'summary': self.request.get('summary'),
'location': self.request.get('place'),
'status' : self.request.get('status'),
'start': {
'dateTime': '2013-05-11T10:00:00.000-07:00' ,
'timeZone': 'America/New_York'
},
'end': {
'dateTime': '2013-05-11T10:25:00.000-07:00',
'timeZone': 'America/New_York'
},
}
request = service.events().insert(calendarId='MyCalendarId', body=event).execute()
else:
self.response.out.write(json.dumps({'error': 'No credentials'}))
page = 'main'
template_values = {
'url': url,
'url_linktext': url_linktext,
'menu' : page
}
template = jinja_environment.get_template('templates/index.html')
self.response.out.write(template.render(template_values))
@decorator.oauth_required
def get(self):
if decorator.has_credentials():
event_name = self.request.get('event-name')
event = {
'summary': 'Appointment from get',
'location': 'Somewhere close to it',
'start': {
'dateTime': '2013-04-15T10:00:00.000-07:00' ,
'timeZone': 'America/New_York'
},
'end': {
'dateTime': '2013-04-15T10:25:00.000-07:00',
'timeZone': 'America/New_York'
},
}
http = decorator.http()
request = service.events().insert(calendarId='MyCalendarId', body=event)
inserted = request.execute(http)
else:
self.response.out.write(json.dumps({'error': 'No credentials'}))
page = 'main'
template_values = {
'url': url,
'url_linktext': url_linktext,
'menu' : page
}
template = jinja_environment.get_template('templates/index.html')
self.response.out.write(template.render(template_values))
該OAuth2用戶使用如下:
decorator = OAuth2Decorator(
client_id='client ID',
client_secret='client secret',
scope='https://www.googleapis.com/auth/calendar')
我想不出這裏有什麼問題,爲什麼我收到「需要登錄」異常在一種情況下,而不是在其他時候這兩種方法幾乎做同樣的事情。
任何幫助表示讚賞。