【Google クチコミ】Google My Business APIを使ってクチコミの一覧を作る(Google マイビジネス / Google API Console )

GoogleのクチコミをAPIを使って一覧を作りたいと思います。

GoogleのクチコミはGoogle マイビジネスで管理されているので、Google My Business API(GMB API)というAPIを使って取得していきます。

Google My Business APIを利用するには、申請が必要で、2週間以内には結果が通知されます。

Google My Business APIのガイドの通り進めていきます。合わせてガイドも見てみてください。
https://developers.google.com/my-business/content/prereqs?authuser=2&hl=ja

前提条件 Google アカウントをもっている、Google マイビジネスに登録済み

1.Google API Consoleでプロジェクトを作る

Google API Consoleで[プロジェクト作成]をクリックして、作成します。

2.APIへのアクセスをリクエスト

  • Google API Console で、Google マイビジネスで使うプロジェクト(先ほど作成したプロジェクト)を選択します。
  • [プロジェクトID]を控えておきます。
  • アクセスリクエストフォーム(Google My Business API: Application Form For Basic Access)に必要事項を入力して送信します。

アクセスリクエストフォーム(Google My Business API: Application Form For Basic Access)

Google My Business APIを使う為には、APIへのアクセスをリクエストする必要があるようで、様々な質問に答えます。

英語での質問なので、入力する内容は英語にしています。

Project ID :先ほど控えた[プロジェクトID]
Project Number :Google API Console > IAMと管理 > 設定 > [プロジェクト番号]

あとは、Google 通訳など使って答えて行きます。

待てど暮らせど結果がこないのでお問い合わせしてみました

申請した際は、2週間以内に結果が通知されます。とありました。

しかし、1ヶ月経ってもなんの音沙汰もありませんので、お問い合わせしてみることにしました。

ここから問い合わせます。
https://support.google.com/business/contact/api_default?authuser=2

ちなみに、日本語では受け付けていないようなので、英語で頑張ります。

Googleから返信がきました

I investigated your issue, and found that the email you mentioned in the API access application form was incorrect and it was bounced. Please reapply and make sure you provide correct information.

まさかの、メールアドレス記入ミス。

もう一度申請してとの事でしたので、再度アクセスリクエストフォームから申請しました。

お問い合わせしてよかったです。

審査開始のメール

申請してから約4営業日くらい経った時に、「アクセスリクエストフォームから申請を受け取りました」というメールが届きました。

We received a whitelist application form requesting access to the Google My Business API.
Please confirm by replying to this email that you submitted the application form. We will proceed with the reviewing of your application once we receive your confirmation.
If you did not request access to the Google My Business API, please let us know immediately.

申請した事が間違っていなければ返信を、との事でしたので、
早速このメールに返信しました。

Congratulations! 審査通過のお知らせメールが届く

メールを返信して割とすぐに審査通過のお知らせを受け取る事ができました。一安心です。

Congratulations – your project has been approved to use the Google My Business API!

Google My Business APIを有効にする

Google DevelopersでGoogle My Business APIを有効にします。

ガイドにショートカットのボタンがあるので、それを使ってみたいと思います。

ガイド:ショッーとカットを使用してAPIを有効にする方法
https://developers.google.com/my-business/content/basic-setup?hl=ja&authuser=2

Google マイビジネス APIを有効にするボタンの画像

申請が通っていると以下のような内容のポップアップが表示されます。
指示に従い進めていきます。

最後にClient IDとClient Secretが表示されるので控えておきます。

公開データにアクセスするので、OAuth 2.0 クライアント IDを設定する

https://developers.google.com/my-business/content/basic-setup?hl=ja#request-client-id

非公開データのクチコミを取得するには、認証が必要で、
その認証をリクエストする為の、クライアントIDを設定します。

Google API コンソールの「認証情報」にいって、「認証情報を作成」をクリックして作成します。

名前はなんでもよくて、「承認済みのリダイレクト URI」には、
認証の為にGoogleに飛んだ際に戻ってくるURLを入れておきます。

例えば、https://example.jp/にアクセスして、Google APIを使いたかったとすれば、

https://example.jp/にアクセスした時に、Googleへログインと、●●を取得していいですか?という認証がでます。

その認証完了した際に戻ってきたいURLです。

https://example.jp/に戻って処理を続ける必要があれば、「https://example.jp/」を追加しておきます。

https://example.jp/sample.phpで処理したいのであれば、それを入れます。

保存終了後、JSONをダウンロードしておきます。

Google Cloud Platform > プロジェクト選択 > APIとサービス > 認証情報
作成した「OAuth 2.0 クライアント ID」の名前をクリック > JSONをダウンロード

Google クチコミのデータを取得する

ガイドも合わせてみてみてください。
https://developers.google.com/my-business/content/review-data?hl=ja#get_reviews_from_multiple_locations

OAuth2.0を使う

Google マイビジネス のクチコミを取得するには、OAuth2.0を利用して認証する必要があります。

よくある「Googleでログインする」のやつです。

ライブラリがありますので、それを使って進めていきます。

Google APIを使うためのライブラリをダウンロード

まず、Google APIを使う為のライブラリがあるので、それをダウンロードします。

Google APIs Client Library for PHPをダウンロードする(Githubに飛びます)
https://github.com/googleapis/google-api-php-client

Githubへ飛びますので、ページ下の方へいくとComposerを使ったインストールの仕方など記載があります。

今回はComposerを利用しているので、

composer require google/apiclient:"^2.0"

上記をcomposer.jsonに記載して、composer updateをします。

OAuth 2.0の認証するコードを書く

//さっきインストールしたライブラリGoogle Clienを使います。
$client = new \Google_Client();
//アプリケーションの名前
$client->setApplicationName('アプリケーションの名前(適当に入れます)');
//スコープ(Googleマイビジネス)
$client->setScopes(["https://www.googleapis.com/auth/plus.business.manage"]);
//OAuth 2.0 クライアント ID認証情報が記載されたJSON
$client->setAuthConfig('client_secret_****.apps.googleusercontent.com.json');
$client->setAccessType("offline");

//以前作成したトークンがある場合
//my_bussiness_token.jsonというファイルを作ってトークン情報を保存
if (file_exists('my_bussiness_token.json')) {
	$accessToken = json_decode(file_get_contents('my_bussiness_token.json'), true);
	$client->setAccessToken($accessToken);
}

// 以前のトークンが無いか、有効期限切れの場合
if ($client->isAccessTokenExpired()) {
	// リフレッシュするか新しいトークンを取得
	if ($client->getRefreshToken()) {
		$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
	} else {
		// ユーザに許可を申請
		$client->setRedirectUri(getenv('DOCUMENTS_ROOT')."api/review/google");
		$authUrl = $client->createAuthUrl();
		printf("Open the following link in your browser:\n%s\n", $authUrl);

		if ($_GET['code']) {
			// 認証コードをトークンに交換
			$accessToken = $client->fetchAccessTokenWithAuthCode($_GET['code']);
			$client->setAccessToken($accessToken);

			// エラーの確認
			if (array_key_exists('error', $accessToken)) {
				throw new Exception(join(', ', $accessToken));
			}
		}
	}
	// トークンの保存
	if (!file_exists(dirname('my_bussiness_token.json'))) {
		mkdir(dirname('my_bussiness_token.json'), 0777, true);
		chmod(dirname('my_bussiness_token.json'), 0777);
	}
	file_put_contents('my_bussiness_token.json', json_encode($client->getAccessToken()));
}

ざざっと説明します。

Google Clientライブラリに必要な情報を入れてあげます。
スコープ(Google my Businessですと)とか、OAuth 2.0 クライアント IDはこのjsonファイルに入っていますよとか。

このコードを書いたURLにアクセスすると、初めは認証されていないので、
Auth用のURLが表示されます。

↓この部分ですね。
printf(“Open the following link in your browser:\n%s\n”, $authUrl);

表示されたURLをコピーして、ブラウザに貼り付けアクセスします。
するとGoogleログインの画面になるので、ログインします。
●●情報アクセスしますけどいいですか?のような事が聞かれるのでそのままOKで進みます。

完了するとGoogle Cloud Platformの認証情報で作成した「承認済みのリダイレクト URI」に飛びます。

さて、今回は1つのファイルに「OAuth 2.0の認証するコード」を記載しているので、最初アクセスしたページにリダイレクトして戻ってきているていです。

リダイレクトで戻ってくると、URLに「&code=****」という認証コードをくっつけて戻ってきます。

このパラメーター「code」がある時は、この認証コードをアクセストークンに変換します。

そしてアクセストークンができました!

できたトークンをmy_bussiness_token.jsonに保存して完了です。

次回アクセスした時は先にmy_bussiness_token.jsonを見に行き、有効期限が切れていないのであれば認証済み、切れている場合はリフレッシュもしくは再取得という処理をします。

このアクセストークンがないと非公開の情報は取得できないというわけですね。

注意:アクセストークンは一番最初のアクセスでしか取得できない

時に、my_bussiness_token.jsonにbad requestと書かれたエラーが出てしまう事があります。401エラーなども。

アクセストークン発行しているけど有効期限切れていませんか?

というようなエラーのよう。

実はというか、ここですごくつまずいて、何度もサポートにメールしてしまったんですが、

アクセストークンは初めてアクセスした時にしか取得できない。

という仕様で、

最初のアクセスした時に、認証コードからアクセストークンに変換したデータをjsonに保存していなかったのが原因でした。

というわけで、認証前に戻らなければいけません。

今回Mac OSのChromeを利用していましたので、Googleアカウントのセキュリティから「Googleでログイン」に紐づいているアプリケーションを削除しました。

次にGoogle Cloud Platformの認証情報を作り直します。認証情報のJSONもダウンロードしなおします。

これで再度アクセス(処理をしているページに)して、Googleログイン、認証がすみ、無事にアクセストークンを取得できたのでした。

Google My Businessからクチコミ一覧を取得

これでやっと、Google My Business APIにアクセスできる準備が整いました。
Google My Business APIのガイドではHTTPでデータを取得する方法も記載ありますが、

せっかくライブラリがあるので利用したいと思います。

GMB API PHPクライアント ライブラリをダウンロード

PHPを使って取得するので、PHPクラアント ライブラリを使います。
https://developers.google.com/my-business/samples

$client = new \Google_Client();
//~~~~Google Clientについては上記に書いたので省略

$gmbService = new \Google_Service_MyBusiness($client);
//アカウントリストを取得
$results = $gmbService->accounts->listAccounts();
//取得したアカウントリストの1番目から、ACCOUNT_NAMEというのを取得
$locations = $gmbService->accounts_locations->listAccountsLocations($results['modelData']['accounts']['0']['name']);
//ACCOUNT_NAME($locations)から1件だけレビューを取得
$response = $gmbService->accounts_locations_reviews;
$lists = $response->listAccountsLocationsReviews($location,['pageSize' => '1']);
print_r($lists);

クチコミを取得するには、ACCOUNT_NAMEというのが必要で、
これを取得する為に先にアカウントリストを取得しています。

あとはライブラリに投げて…クチコミが取得できます!