【Google クチコミ】Google Business Profileを新しいAPI v1にアップデートする

▼毎日をちょっと楽しく過ごす

まだ完全ではありません

この記事は、Google クチコミを取得するAPIのバージョンアップに伴うアップデートについて書いていますが、まだ完全ではありません。

Google Business Profile APIでクチコミ(レビュー)を取得していたのですが、400エラーが出てしまい、APIのアップデートを行いました。

口コミ取得のエンドポイントは変わらないといえども、結局、クライアントライブラリもアップデートしなければいけないですよね、そりゃそうだ。

今回でたエラーは以下の通り。ステータスコードは400です。

Message: { 
    "error":
    { 
        "code": 400,
        "message": "Request contains an invalid argument.",
         "errors": [ {
             "message": "Request contains an invalid argument.",
              "domain": "global", "reason": "badRequest" 
              } ],
               "status": "INVALID_ARGUMENT",
                "details": [ {
                     "@type": "type.googleapis.com/google.mybusiness.v4.ValidationError",
                      "errorDetails": [ {
                         "message": "This API will soon be deprecated. Please migrate all the usages to My Business Account Management API - https://developers.google.com/my-business/reference/accountmanagement/rest" 
                            } ]
                        } ]
    } }

新しいAPIを有効にする

Google Cloud で新しいAPIを有効にします。

今回のクチコミで必要なのは以下↓

  • Google My Business API(以前利用していたのであればこれは入っている)
  • My Business Account Management API

ビジネスプロフィールに関連付けられたAPIは以下を参考にできます。

https://developers.google.com/my-business/content/basic-setup

クライアントライブラリをアップデートする

今回はPHPを利用していますので、PHPのライブラリをアップデートしました。

他の言語のクライアントライブラリ一覧は以下を参考↓

https://developers.google.com/my-business/samples

PHPのクライアントライブラリは以下↓

https://github.com/googleapis/google-api-php-client

composerを使ってクライアントライブラリをアップデートします。

composer require google/apiclient:^2.12.1

Google APIを利用するライブラリと、各サービスを利用するライブラリ

クライアント ライブラリは、Google APIに接続するクライアント「google-api-php-client」と、各エンドポイントを利用するクライアント「google-api-client-services」という2つがあります。

どちらも必要なのですが、各エンドポイントを利用する「google-api-client-services」は、沢山あるので必要なものだけをインストールできます。

composerで必要なサービスだけを設定るする

composerに必要なサービスだけを記載してupdateすることで、必要サービスだけ入れます。

{
    "require": {
        "google/apiclient": "^2.12.1"
    },
    "scripts": {
        "pre-autoload-dump": "Google\\Task\\Composer::cleanup"
    },
    "extra": {
        "google/apiclient-services": [
            "MyBusinessAccountManagement"
        ]
    }
}

extraの箇所に、今回口コミ取得に必要なサービスを入れました。

  • MyBusinessAccountManagement

このextraんに記載するサービスは一体どこで探してきたらいいのか分からなかったので、ライブラリのsrcから探してみました。

https://github.com/googleapis/google-api-php-client-services/tree/main/src

各サービス(各エンドポイント)に接続するクライアントライブラリは以下からも利用できます↓

https://github.com/googleapis/google-api-php-client-services

コードもアップデート

クライアント ライブラリをアップデートしたので、コードもアップデートして行きます。

Google APIに接続する(google-api-php-client)

Google APIを利用するにはGoogle Cloudで先に設定したりする必要もあり、単にエンドポイントを叩けばいいというわけではありません。

というわけで最初にこのクライアントでGoogle APIに繋ぎます。

大体は以前のバージョンのままでOKなのですが、インスタンスを生成するところがちょっと変わります。

$client =  new \Google\Client();

旧:$client = new \Google_Client();

新:$client = new \Google\Client();

このような感じでちょっとだけ変わりました。

Google クチコミを取得する

さて、肝心な箇所です。ちなみに現在(2022/06/25時点)ではまだクチコミのエンドポイントは旧v4.9のままです。

ということで、新しいサービスクライアントは使えなそうなので、生のエンドポイントを叩いていくスタイルで取得をします。

$client =  new \Google\Client();

...トークンなどの処理(v4.9と一緒)

//クチコミ一覧を取得
$httpClient = $client->authorize();
$response = $httpClient->get('https://mybusiness.googleapis.com/v4/{parent=accounts/*/locations/*}/reviews');
$reviews = json_decode((string)$response->getBody(), true);

//クチコミ50件出てくる
var_dump($reviews);

使っているエンドポイントの公式説明はこちら↓

https://developers.google.com/my-business/reference/rest/v4/accounts.locations.reviews/list

参考にさせていただいたのはこちら↓

https://github.com/googleapis/google-api-php-client/issues/2096

次の50件を取得する場合もGETで投げてあげます。

//最初の50件
$response = $httpClient->get('https://mybusiness.googleapis.com/v4/{parent=accounts/*/locations/*}/reviews');
$reviews = json_decode((string)$response->getBody(), true);
//クチコミと一緒に次の50件を取得するトークンも戻ってくるので、それを取得
$nextPageToken = $reviews['nextPageToken'];

//次の50件
$response = $httpClient->get('https://mybusiness.googleapis.com/v4/{parent=accounts/*/locations/*}/reviews?pageToken='.$nextPageToken);
$nextReviews = json_decode((string)$response->getBody(), true);

//次の50件が出てくる
var_dump($nextReviews);

クチコミを取得すると次の50件がある場合は、nextPageTokenというのが一緒の返ってくるので、それをGETで投げると次の50件が取得できます。

{parent=accounts/*/locations/*/}には何を入れるのか

躓いてしまうのが「{parent=accounts/*/locations/*/}」にはいったい何を入れるのか、ということです。

ここは親アカウントのNameと、クチコミ(レビュー)を取得したい、例えば店舗などのNameです。

例えばこのように入ります。

https://mybusiness.googleapis.com/v4/accounts/{親アカウントname}/locations/{クチコミ取得する店舗のname}/reviews

Nameというとローマ字を想像しますが、数字の羅列です。

親アカウントは、大抵は自分のGoogleアカウントになるかと思います。

最初にGoogle CloudでAPIを有効にする際にログインをしたアカウントです。
※プロジェクト番号とは別です。

これをどこで確認するかというと、最初のGoogle Cloudやcomposerで設定した「MyBusinessAccountManagement」を使って取得ができます。

親アカウント(自分のアカウント)のNameを取得する

アカウント周りのエンドポイントはv1へアップデートされているので、クライアント ライブラリを使って取得が可能です。

$client =  new \Google\Client();

...トークンなどの処理(v4.9と一緒)

$service = new \Google\Service\MyBusinessAccountManagement($client);
$myAccountName = $service->accounts->listAccounts()->getAccounts()[0]->getName();

echo $myAccountName;

これで取得できるのが親のアカウントNameで、「accounts/{親アカウントname}」という形式で取得できます。

クチコミを取得する店舗のNameを取得する

次に、{クチコミ取得する店舗のname}もAPIを使って取得することになります。

正確に言うと、APIで取得する以外の方法が未だに分からないだけで、どこかで確認できるのかもしれないです。

実は、このクチコミを取得するAPIは現時点で400エラーが返ってきて、上手くいっていません。

元々v4でクチコミを取得されている場合は、既にこのデータを持っているはずなので、それを使えば問題ないです。

新たに取得したい場合は、現在調査中なのでもうしばらくお待ちいただきたいです。

上手くいかない場合

エラーが返ってくる、上手く行かない場合は、以下を再度確認してみてください。

親アカウント(自分のアカウント)と、取得したいクチコミを持っている店舗や場所が紐付いている

親アカウント(自分のアカウント)が基本なので、取得する先も紐付いている必要があります。

権限が無ければ、権限をもいましょう。

Google Business Profileにログインしてみると紐付いているか分かるはずです。

APIへのアクセスをリクエストしている

API利用の前提条件を確認してみます↓

https://developers.google.com/my-business/content/prereqs

400エラーやBat request

投げている値に誤りがある場合が多そうです。例えば「親アカウントのName」や、エンドポイントのURLに誤りがあるなど。

最後に

Google APIはいつも難しいイメージです。公式ドキュメントは揃っていますが、細かく書いているわけではありません。(そんな気がする)

英語であればお問い合わせできるのですが、クライアント ライブラリを使っていますと伝えると、クライアント ライブラリに聞いてくれと、なかなか冷たいです。

結局今回も利用したいエンドポイントがv4.9のままであるという点を解決するのと、クライアント ライブラリの使い方には時間がかかってしまいました。

まだ、アカウント取得周りでできていない箇所もありますが、同じように困っている方がいるのではないかと思い、取り急ぎ公開しました。

この記事はあなたの役に立ちましたか?