7

現在、Python で Google API と対話する Web アプリを構築しています。oauth を使用してユーザー リソースにアクセスします。認証とトークンのアップグレードが成功したら、次のようにします。

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

次に、API のさまざまなフィードにアクセスして、ユーザーの Youtube ビデオなどのリストを取得できます。しかし、ユーザーはGoogleでのみログインしており、私が持っているのはoauthトークンだけで、ユーザーに関するその他の情報はありません. ユーザーに関する情報を取得するにはどうすればよいですか? 電子メール、表示名などのように? これを解決することができずに、さまざまなものをテストしてきました...

ここで興味深いことがわかりました: Oauth を使用して Gmail で認証した後にメール アドレスを取得する方法はありますか?

私の理論は、PhotoService.GetAuthSubToken() を使用し、そのトークンを再利用して連絡先を要求し、連絡先エントリから auther.email を取得できるというものでした。認証の範囲を次のように変更しました。

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

魔女は、両方のサービスに有効なrokenを返します...何かアイデアはありますか?

4

2 に答える 2

13

特に使いやすいとわかったリソースを追加したいだけです。ここにあります:link。カルスボはスコープを検索して正しい場所に案内してくれました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']、あなたはすでにそこにあなたの電子メールを持っています! :)

于 2014-10-20T09:15:41.873 に答える