4

Python の「デスクトップ」アプリケーションの Google アカウントから連絡先のすべてのメール アドレスを取得する良い方法を探しています。

初めて、Google Code を使用してアプリを作成しました。Google Plus API を切り替えて、ほとんどのユーザー データを取得しましたが、連絡先は取得しませんでした。

私は調査を開始し、多くのものを見つけましたが、それらのほとんどは時代遅れでした.

gdata ライブラリを使用して連絡先を取得する良い方法を見つけましたが、フィードバックなしでhttps://www.google.com/m8/feedsを介して完全な読み取り/書き込みアクセスを許可しました。

self.gd_client = gdata.contacts.client.ContactsClient(source='MyAppliName')
self.gd_client.ClientLogin(email, password, self.gd_client.source)

stackoverflow に移行した公式の「google contact api」Google グループによると、読み取り専用アクセスが壊れています。

ところで、私は「自分のアプリケーションを信頼してください。私は読み取り専用アクセスを使用しています。誓って」の大ファンではありません。

https://developers.google.com/oauthplaygroundでGoogle API プレイグラウンドを見つけました。そこでは、連絡先を含むほとんどの API で OAuth2.0 トークンを使用し、Web ページを切り替えます。

Google OAuth 2.0 Playground は次の権限をリクエストしています:

  • 連絡先を管理する

このプレイグラウンドによると、Google コンタクト API で OAuth2.0 を使用することは可能ですが、リストに表示されない https://www.google.com/m8/feeds をスコープに追加する方法がわかりません。 .

それを行う他の方法はありますか?

4

2 に答える 2

4

この質問がまだ解決されていない場合は、oauth2 と Google Contact API v3 の使用方法のサンプル コードを次に示します。

import gdata.contacts.client
from gdata.gauth import AuthSubToken
from oauth2client import tools
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage


def oauth2_authorize_application(client_secret_file, scope, credential_cache_file='credentials_cache.json'):
    """
    authorize an application to the requested scope by asking the user in a browser.

    :param client_secret_file: json file containing the client secret for an offline application
    :param scope: scope(s) to authorize the application for
    :param credential_cache_file: if provided or not None, the credenials will be cached in a file.
        The user does not need to be reauthenticated
    :return OAuth2Credentials object
    """
    FLOW = flow_from_clientsecrets(client_secret_file,
                                   scope=scope)

    storage = Storage(credential_cache_file)
    credentials = storage.get()

    if credentials is None or credentials.invalid:
        # Run oauth2 flow with default arguments.
        credentials = tools.run_flow(FLOW, storage, tools.argparser.parse_args([]))

    return credentials

SCOPES = ['https://www.google.com/m8/feeds/', 'https://www.googleapis.com/auth/userinfo.email']

credentials = oauth2_authorize_application('client-secret.json', scope=SCOPES)
token_string = credentials.get_access_token().access_token

# deprecated!
# auth_token = AuthSubToken(token_string, SCOPES)

with open('client-secret.json') as f:
    oauth2_client_secret = json.load(f)

auth_token = gdata.gauth.OAuth2Token(
    client_id=oauth2_client_secret['web']['client_id'],
    client_secret=oauth2_client_secret['web']['client_secret'],
    scope=SCOPES,
    user_agent='MyUserAgent/1.0',
    access_token=credentials.get_access_token().access_token,
    refresh_token=credentials.refresh_token)


client = gdata.contacts.client.ContactsClient(auth_token=auth_token)

query = gdata.contacts.client.ContactsQuery()
于 2015-03-26T09:35:18.413 に答える
1

リクエストは次のようになります。

https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds&
state=<myState>&
redirect_uri=<Redirect URI>&
response_type=code&
client_id=<my Client ID>&approval_prompt=force

これにより、ユーザーの連絡先への読み取り/書き込みアクセスが取得されます。

于 2012-12-06T19:57:41.287 に答える