【问题标题】:How to read google calendar events of user after getting access token?获取访问令牌后如何读取用户的谷歌日历事件?
【发布时间】:2020-01-05 06:59:49
【问题描述】:

我想在 django 中获取我的用户的谷歌日历事件,我编写了以下代码。此代码有效并保存用户的访问令牌,但我不知道我应该怎么做才能在它之后获取用户的谷歌日历事件。 在此之前我遇到了一些问题,并在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?????

【问题讨论】:

  • 哪里可以联系到你?

标签: python django google-api google-calendar-api google-api-python-client


【解决方案1】:

我终于找到了如何创建服务来获取谷歌日历事件只需拥有访问令牌:

首先你应该得到之前保存的令牌(来自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', [])

【讨论】:

    【解决方案2】:

    如果您查看 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
    

    【讨论】:

    • 谢谢,但我如何在“new_event”def 中创建“服务”,这个“page_token”是我获得并保存在“OAuth2CallBack”类中的令牌吗?
    • 是的,我遇到了问题。我在另一个问题中说过,对此只有一些评论。 this question
    • 我终于找到了解决办法并添加了。
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2017-11-13
    • 2017-04-23
    • 1970-01-01
    • 2021-12-23
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多