1

People API を使用する最も基本的な必要最小限の例を取得しようとしていますが、いくつかの問題があります。

私は Python を使用して、People V1 API を使用してすべての接続のリストを取得しています。重要なことは、私が書いているスクリプトはサーバー上で実行され、ユーザー アクションを伴う従来の 3-legged OAuth を使用できないため、サービス アカウントを使用していることです。

私の開発者コンソールでは、サービス アカウントの資格情報が設定されています。

ここに画像の説明を入力

People API も有効にしています。

ここに画像の説明を入力

秘密の JSON 資格情報もダウンロードしました (明らかな理由により編集されています)。

{
  "type": "service_account",
  "project_id": [REDACTED],
  "private_key_id": [REDACTED],
  "private_key": [REDACTED],
  "client_email": [REDACTED],
  "client_id": [REDACTED],
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": [REDACTED]
}

最後に、私のスクリプトです。Google が提供するこの例から抜粋した簡略版を使用しました。ここでの主な違いは、サービス アカウントを使用しているため、資格情報を確認してユーザー OAuth フローを開始するほとんどのメソッドを省略したことです。

import httplib2

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = 'https://www.googleapis.com/auth/contacts.readonly'

def main():
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        'keep-in-touch-5d3ebc885d4c.json', SCOPES)

    http = credentials.authorize(httplib2.Http())

    service = discovery.build('people', 'v1', http=http,
        discoveryServiceUrl='https://people.googleapis.com/$discovery/rest')

    print('List 10 connection names')
    results = service.people().connections().list(resourceName='people/me',
        pageSize=10).execute()
    connections = results.get('connections', [])

    for person in connections:
        names = person.get('names', [])
        if len(names) > 0:
            name = names[0].get('displayName')
            print(name)


if __name__ == '__main__':
    main()

問題は、これは何も返さないことです。Google+ アカウントに少なくとも 1 つの接続があることはわかっていますが、結果の空の配列が返されます。コード自体に何か問題がありますか?または、問題は私のアカウントにある可能性がありますか?

どんな助けでも感謝します、ありがとう!

4

0 に答える 0