我想在django中获取我的用户的google日历事件,我编写了以下代码。这段代码可以工作并保存用户的访问令牌,但是我不知道该怎么做才能获取用户的Google日历事件。 在此之前,我遇到了一些问题,并在this question中提出了问题,并试图解决它,现在我在这里。 有人能帮我吗?
在网址中:
url(r'^new_event/$', views.new_event, name="new_event"),
url(r'^oauth2_callback', OAuth2CallBack.as_view(), name='oauth2_callback'),
url(r'^access_to_google_calendar$', views.access_to_google_calendar,
name="access_to_google_calendar"),
视图中:
def access_to_google_calendar(request):
# Following line is for getting google calendar events of user to show him
flow = OAuth2WebServerFlow(settings.CLIENT_ID_CALENDAR,
settings.CLIENT_SECRET_CALENDAR,
scope='https://www.googleapis.com/auth/calendar',
redirect_uri=settings.REDIRECT_URI_CALENDAR)
generated_url = flow.step1_get_authorize_url()
return HttpResponseRedirect(generated_url)
class OAuth2CallBack(View):
def get(self, request, *args, **kwargs):
code = request.GET.get('code', False)
if not code:
return JsonResponse({'status': 'error, no access key received from Google or User declined permission!'})
flow = OAuth2WebServerFlow(settings.CLIENT_ID_CALENDAR, settings.CLIENT_SECRET_CALENDAR,
scope='https://www.googleapis.com/auth/calendar',
redirect_uri=settings.REDIRECT_URI_CALENDAR)
credentials = flow.step2_exchange(code)
http = httplib2.Http()
http = credentials.authorize(http)
credentials_js = json.loads(credentials.to_json())
access_token = credentials_js['access_token']
# Store the access token in case we need it again!
username = request.user.username
with open('token.csv', 'w') as file:
fieldnames = ['user', 'token']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'user': username, 'token': access_token})
request.session['access_token'] = access_token
return redirect('new_event')
def post(self, request, *args, **kwargs):
return HttpResponseNotAllowed('Only GET requests!')
def new_event(request):
# Here how to get google event of user?????
答案 0 :(得分:0)
如果您查看Google日历的文档,则大多数方法都有示例代码。 events.list
page_token = None
while True:
events = service.events().list(calendarId='primary', pageToken=page_token).execute()
for event in events['items']:
print event['summary']
page_token = events.get('nextPageToken')
if not page_token:
break
答案 1 :(得分:0)
我终于找到了如何创建服务来获取Google日历事件仅具有访问令牌:
首先,您应该获取之前保存的令牌(从csv文件或数据库或...在此保存在csv文件中)
token = get_from_any_where_you_saved_it_before
然后:(在这种情况下,第一行很重要)
credentials = client.AccessTokenCredentials(token, 'USER_AGENT')
service = build('calendar', 'v3', credentials=credentials)
google_calendar_events = service.events().list(calendarId='primary', singleEvents=True,
orderBy='startTime').execute()
google_calendar_events = google_calendar_events.get('items', [])