首页 文章

如何使用Google API Python客户端在OAUTH之后获取用户电子邮件

提问于
浏览
4

我目前正在构建一个与Python中的Google API交互的Web应用程序 . 使用oauth访问用户资源 . 成功验证和升级令牌后,如下所示:

gd_client = gdata.photos.service.PhotosService()
gd_client.SetAuthSubToken(token)
gd_client.UpgradeToSessionToken()

然后,我可以访问API的不同供稿,并获取用户Youtube视频的列表 . 但是用户只使用Google登录,我所拥有的只是一个oauth令牌而没有关于用户的其他信息 . 如何检索用户的信息?像电子邮件,显示名称等?我一直在测试很多不同的东西而没有设法解决这个问题......

我在这里找到了一些有趣的东西:Is there a way to get your email address after authenticating with Gmail using Oauth?

我的理论是我可以使用PhotoService.GetAuthSubToken()然后重用该令牌来请求联系并从联系人条目获取auther.email . 将auth的范围更改为:

scope = ['https://picasaweb.google.com/data/', 'https://www.google.com/m8/feeds/']

女巫回归有效的两种服务...任何想法?

2 回答

  • 7

    所以我发现了一个很棒的方法!

    请求https://www.googleapis.com/auth/userinfo.email的额外范围然后我可以使用Gdata.Client访问它以获取电子邮件地址 .

    完整的示例代码:https://code.google.com/p/google-api-oauth-demo/

    完整写下我如何到达那里:http://www.hackviking.com/2013/10/python-get-user-info-after-oauth/

  • 7

    我只是想添加一个我发现特别容易使用的资源 . 这是:link . Kallsbo通过搜索范围 https://www.googleapis.com/auth/userinfo.email 将我带到了正确的位置 . 在您拥有 credentials 之后,只需使用以下直接从该链接获取的函数:

    def get_user_info(credentials):
      """Send a request to the UserInfo API to retrieve the user's information.
    
      Args:
        credentials: oauth2client.client.OAuth2Credentials instance to authorize the
                     request.
      Returns:
        User information as a dict.
      """
      user_info_service = build(
          serviceName='oauth2', version='v2',
          http=credentials.authorize(httplib2.Http()))
      user_info = None
      try:
        user_info = user_info_service.userinfo().get().execute()
      except errors.HttpError, e:
        logging.error('An error occurred: %s', e)
      if user_info and user_info.get('id'):
        return user_info
      else:
        raise NoUserIdException()
    

    把它叫做 user_email = get_user_info(credentials)['email'] ,你已经收到了你的电子邮件! :)

相关问题