2017-08-25 11 views
2

Google People APIを使用してGoogleの連絡先を追加および更新しようとしています。 Googleのドキュメント(https://developers.google.com/people/v1/getting-started)に記載されているサンプルコードを使って、ほぼそのままAPIを設定しました。 Can't access my profile data when accessing google-people API(私は同様の質問への答えを見てきましたGoogle People APIのドキュメントの例に従うと、「不明なパラメータ:「personFields」」エラーが発生する

Fatal error: Uncaught exception 'Google_Exception' with message '(get) unknown parameter: 'personFields'' in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Service/Resource.php:147 Stack trace: #0 /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/vendor/google/apiclient-services/src/Google/Service/People/Resource/People.php(52): Google_Service_Resource->call('get', Array, 'Google_Service_...') #1 /home/danbak15/bakerlegalservicesmo.com/office/BLScontacts.php(36): Google_Service_People_Resource_People->get('people/me', Array) #2 {main} thrown in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Service/Resource.php on line 147 

$profile = $people_service->people->get('people/me', array('personFields' => 'names,emailAddresses')); 

エラーが次のとおりです。私は再び文書からそのまま来て次のコード行、ためにエラーが発生します)では、ドキュメントで要求されているようにGoogle_Service_Peopleクラスの代わりにGoogle_Service_PeopleServiceクラスを使用することをおすすめします。しかし、これをやろうとすると別のエラーが発生します。

Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ "error": { "code": 401, "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "errors": [ { "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "domain": "global", "reason": "unauthorized" } ], "status": "UNAUTHENTICATED" } } ' in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Http/REST.php:118 Stack trace: #0 /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Http/REST.php(94): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), 'G in /home/danbak15/bakerlegalservicesmo.com/office/google-api-php-client-2.2.0/src/Google/Http/REST.php on line 118 

この時点で、私は完全に迷っています。 Googleの連絡先を使用して連絡先を追跡し、PHP経由でGoogleの連絡先と仕事をしたいので、自分のデータベースに追加することができます。誰もこれにどのような光を当てることができますか?助けをよろしくお願いします。

更新: 別のサーバーから別の結果を得ることができるかどうかを確認するために、自分のコンピュータ上のローカルサーバーにページを移動してみました(Googleがそのページを自分のサイトにリダイレクトしていることを忘れてしまいました)。何とか、魔法のように、私は自分のウェブサイトからスクリプトにアクセスしようとしたときに働いていました - 約15-30分ほどです。それから、前と同じエラーが出ました。私がlocalhostサーバーからページを実行すると、無限の認可リダイレクトループ(Googleがオンラインページに私をリダイレクトすると予想される)に巻き込まれることになりますが、オンラインページは一度は動作します。

この時点で、私は問題がどこにあるかを推測することはできません。これは誰にも意味がありますか?

+0

最新のバージョンのクライアントライブラリをお持ちですか? – paolo

+0

私は同じ問題を抱えていますが、Google_Service_PeopleServiceを使用することで問題は解決しました。 2番目のエラーを解決することに集中することをお勧めします。 – Isaiah

+0

私は正しいバージョンと思われるバージョンのGoogle API PHPクライアントライブラリを使用しています(私は間違いがありますが)。 Google_Service_PeopleServiceを使用しているときに、認証資格情報のエラーについて多少なりとも迷っています。私はOAuth 2の資格を持っていますが、これはGoogle_Service_Peopleクラスを使用しているときにうまく動作します。エラーをスローするGoogle_Service_PeopleServiceクラスを使用する場合のみです。私の信任状に何かが見えたり変わったりするのでしょうか? –

答えて

0

私は何が起こるか知っていると思います。 私の英語があまりよくないので、私はあなたが私の言いたいことを理解できることを願っています。

私の場合、私はGoogle_Service_Peopleクラス(src \ Google \ Service \ People.php)を使用しています。だから私はPeople.phpについて見てみると、この参照してください。

$this->people = new Google_Service_People_Resource_People(
    $this, 
    $this->serviceName, 
    'people', 
    array(
     'methods' => array(
     'get' => array(
      'path' => 'v1/{+resourceName}', 
      'httpMethod' => 'GET', 
      'parameters' => array(
      'resourceName' => array(
       'location' => 'path', 
       'type' => 'string', 
       'required' => true, 
      ), 
      'requestMask.includeField' => array( // <= This is the problem. 
       'location' => 'query', 
       'type' => 'string', 
      ), 
     ), 
     ), 

を私は、公式ドキュメントをチェックし、それが言う「requestMask.includeFieldは既に廃止されました。」それは何とかapiコードのままです。

だから私はこのように変更します。その後

$this->people = new Google_Service_People_Resource_People(
    $this, 
    $this->serviceName, 
    'people', 
    array(
     'methods' => array(
     'get' => array(
      'path' => 'v1/{+resourceName}', 
      'httpMethod' => 'GET', 
      'parameters' => array(
      'resourceName' => array(
       'location' => 'path', 
       'type' => 'string', 
       'required' => true, 
      ), 
      'personFields' => array( // <- Change to 'personFields' 
       'location' => 'query', 
       'type' => 'string', 
      ), 
     ), 

すべてのことがうまく行きます。

Google APIクライアントライブラリ()をご利用の場合は、このクライアントライブラリはベータです。だから、彼らのapiの中には、apiの文書の中に正確にどのように見えていないものがあります。

これは私の場合です。英語は私の言葉ではないので、私があなたが何を記述しようとしているのか理解できれば幸いです

0

これは私のためにうまく働いた:

$scopes[] = 'https://www.googleapis.com/auth/contacts.readonly'; 
$client->setScopes($scopes); 
$service = new Google_Service_People($client); 
$optParams = ['requestMask.includeField' => 'person.names']; 
$connections = $service->people_connections->listPeopleConnections('people/me', $optParams)->getConnections(); 
foreach ($connections as $connection) { 
    if (!empty($connection->getNames()[0])) { 
    print $connection->getNames()[0]->getDisplayName() . "\n" . '<br>'; 
    } 
} 
0

ジョン・ロドリゲスは、問題を解決しました。ありがとうございました!私の図書館は少し異なりますが、問題は同じでした。私の場合は、Google_Service_Peopleクラスの代わりにGoogle_Service_PeopleServiceクラスを使用しています。変更したファイルへのパスは、google-api-php-client-2.2.0/vendor/google/apiclient-services/src/Google/Service/PeopleService.phpです。この場合、$ this-> peopleはメソッドの配列を含むGoogle_Service_PeopleService_Resource_Peopleクラスです。私は償却されたコードをコメントアウトしました。関連するコードは次のとおりです。

これまでのところこれがうまくいきましたが、まだ完全にテストされていません。ご協力ありがとうございました!

関連する問題