MENU

【Laravel】Google口コミ(レビュー評価)をAPIで取得して表示する実装

店舗紹介サイトや会社紹介ページでは、Googleの口コミ評価を表示したいケースがあります。

例えば以下のような情報です。

・Googleの口コミ評価(★4.3 など)
・レビュー件数
・Googleマップへのリンク

これらの情報は、Googleが提供している「Google Places API」を利用することで取得できます。

この記事では、LaravelでGoogle Places APIを使用して、Google口コミの評価値を取得し、データベースに保存してWebサイトに表示する方法を解説します。

また実装する中で重要だと感じた、以下のポイントについても紹介します。

・Google Places APIの基本的な仕組み
・LaravelでAPIを呼び出す方法
・.envにAPIキーを安全に保存する方法
・API料金を無駄に発生させない設計
・1日1回のバッチ処理で口コミを更新する方法

LaravelでGoogle口コミを表示したい方の参考になれば幸いです。

目次

Google口コミはAPIで取得できる

Googleの口コミ情報はGoogle Places APIを使用することで取得できます。

取得できる主な情報

  • 店舗名
  • 住所
  • 電話番号
  • 営業時間
  • 口コミ評価
  • レビュー数

今回の記事では口コミ評価(rating)を取得します。

Google CloudでAPIキーを取得する

以下の流れでAPIキーを取得します。

  1. Google Cloudでプロジェクト作成
  2. Places APIを有効化
  3. APIキーを発行

.envにAPIキーを設定

APIキーはGitにコミットしないように.envで管理します。

.envの記述

GOOGLE_MAPS_API_KEY=xxxxxxxxxxxxxxxx

「xxxxxxxxxxxxxxxx」の部分にAPIキーを記載します。

config/services.phpに設定を追加

config/services.phpの記述

'google' => [
    'maps_api_key' => env('GOOGLE_MAPS_API_KEY'),
],

Laravelではこのようにservices.phpを経由してAPIキーを取得するのが一般的です。

Google口コミを取得するサービスクラスを作成

API処理はサービスクラスにまとめます。

app/Services/GoogleReviewService.php

namespace App\Services;

use Illuminate\Support\Facades\Http;

class GoogleReviewService
{
    public function fetchRating($placeId)
    {
        $response = Http::get(
            'https://maps.googleapis.com/maps/api/place/details/json',
            [
                'place_id' => $placeId,
                'fields'   => 'rating',
                'key'      => config('services.google.maps_api_key'),
            ]
        );

        $data = $response->json();

        return [
            'rating' => $data['result']['rating'] ?? null
        ];
    }
}

店舗登録時に口コミ評価を取得する

今回は店舗登録時にGoogle口コミ評価を取得する設計にします。

Store.php
protected static function booted()
{
    static::saved(function ($store) {

        if (!empty($store->place_id)) {

            $service = new GoogleReviewService();
            $reviewData = $service->fetchRating($store->place_id);

            if ($reviewData) {
                $store->google_review = $reviewData['rating'];
                $store->saveQuietly();
            }

        }

    });
}

ポイント

  • saveQuietly() を使用
  • イベントループを防ぐ

カラムを追加する方法については以下の記事でご紹介しています。

Webサイトに口コミ評価を表示する

DBに保存した値を表示します。

bladeの記述

{{ $store->google_review }} // 4.3

$store->google_reviewで口コミ評価が取得できるので、CSSで自由にカスタマイズすることも可能です。

Google APIの料金

Google Places APIは従量課金制です。

Place Details API
$17 / 1000リクエスト

ただし、Google Cloudには

$200 / 月
無料クレジット

があります。

そのため通常のサイトであれば無料枠内で収まるケースが多いです。

API料金を無駄に発生させない設計

よくある失敗として

ページ表示ごとにAPIを呼び出す

という実装があります。

1日1000PV
↓
API1000回
↓
課金

今回の記事では

登録時のみAPIを実行

という設計にしています。

店舗登録
↓
API1回
↓
DB保存

この方法によりAPI使用回数を大幅に削減できます。

口コミ評価を1日1回更新するバッチ処理

Google口コミは時間が経つと変化するため、
1日1回更新するバッチ処理を用意します。

Laravelではスケジュール機能を使用できます。

Artisanコマンド作成

php artisan make:command UpdateGoogleReviews
app/Console/Commands/UpdateGoogleReviews.php
public function handle()
{
    $stores = Store::whereNotNull('place_id')->get();    $service = new GoogleReviewService();    foreach ($stores as $store) {        $reviewData = $service->fetchRating($store->place_id);        if ($reviewData) {
            $store->google_review = $reviewData['rating'];
            $store->saveQuietly();
        }    }    return 0;
}

Kernel.php にスケジュールを設定

app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('reviews:update')->daily();
}

これにより

1日1回
↓
口コミ更新

されます。

まとめ

この記事では、LaravelでGoogle口コミを取得してサイトに表示する方法を紹介しました。

ポイント

  • Google口コミはPlaces APIで取得できる
  • APIキーは .envで管理
  • API処理はサービスクラスに分離
  • APIは登録時に実行すると効率的
  • 口コミ更新は1日1回のバッチ処理で対応

Google口コミを表示すると、サイトの信頼性やクリック率が向上するケースも多いので、店舗サイトなどでは非常に有効な機能です。

LaravelでGoogle口コミを表示したい方は、ぜひ参考にしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Muta Blog運営者はデザインも開発もやるWebエンジニアです。
本ブログでは現場で培ったWebの知識やノウハウを発信しています。
Web制作歴5年/現在ReactやRubyを中心に幅広く学習中/

目次