「記事の表示ランキング順に一覧表示したい」
ブログサイトなど多くの記事を扱うサイトでは昔からある話ですね。
これまで、そのようなランキングのデータソースとして、多くの場合はGoogle Analytics、GA(UA)を利用してきましたが、2023年7月に計測を停止(UA無償版)、今後はGoogle Analytics 4(GA4)を使用していく必要があります。
データ取得についても、これまではgoogle-api-php-client(ライブラリ)を使ってGoogle Analyticsのデータを取得してすることが多かったと思いますが、GA4に変わったことにより、Google Analytics Data APIを使用していくことになります。
実装方法が変わることにより実装までの準備も変わってきますがこれまでは、
といった手順の準備が必要でした。
対してGAでは以下の手順になります。
APIを有効にするのが今まではGoogle Cloud Console(またはGoogle Cloud Platform)だったものが、
Google Cloud Platformに一本化されています。
大きく異なるのがクライアントアプリを自身でダウンロード、アップロードする必要があったのものが、
Composerでインストールといった点です。
Google Analytics Data APIを利用するには、Google Cloud Platform(GCP)で有効にする必要があります。
また、GCPで有効にしたAPIを呼び出すには認証情報が必要となります。
認証情報の種類にはいくつかありますが、今回の例では、サービスアカウントを作成して認証情報(JSONファイル)をダウンロードしている前提となります。
GA4のプロパティのデータをAPIで扱うため、GA4のアクセス管理画面から、作成したサービスアカウントをユーザとして追加します。
サービスアカウントをユーザとして追加したプロパティを、APIで扱うにはプロパティIDが必要となります。
後述するGoogle Analytics Data APIの実装手順の方で必要になってきます。
composer require google/analytics-data
Composerを使用できるようにしておく必要がありますが、非常に簡単になりました。
APIの使用方法もやることは変わらないですが、当然書き方は異なってきます。
require __DIR__ . '/vendor/autoload.php';
use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __DIR__ . '/credential.json'); // 取得した認証情報
$propertyId = '*********'; // 対象のGA4プロパティID
$client = new BetaAnalyticsDataClient();
$response = $client->runReport([
'property' => 'properties/' . $propertyId,
'dateRanges' => [
new DateRange([
'start_date' => '7daysAgo', //対象開始日
'end_date' => 'today', //対象終了日
]),
],
'dimensions' => [
new Dimension(
[
'name' => 'pagePath',
]
),
new Dimension(
[
'name' => 'pageTitle',
]
),
],
'dimensionFilter' => new FilterExpression([
'filter' => new Filter([
'field_name' => 'pagePath',
'string_filter' => new StringFilter([
'match_type' => MatchType::FULL_REGEXP, // 正規表現
'value' => "~^/***/***/", // フィルタする文字列
])
]),
]),
'limit' => 10,
'metrics' => [
new Metric(
[
'name' => 'pageViews',
]
),
],
'orderBys' => [
new OrderBy([
'metric' => new MetricOrderBy(
[
'metric_name' => 'pageViews'
]
),
'desc' => true
])
],
]);
$responseがJSON形式で取得できるのであとは表示側で活用していくだけです。
また、
use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\OrderBy; use Google\Analytics\Data\V1beta\OrderBy\MetricOrderBy; use Google\Analytics\Data\V1beta\FilterExpression; use Google\Analytics\Data\V1beta\Filter; use Google\Analytics\Data\V1beta\Filter\StringFilter; use Google\Analytics\Data\V1beta\Filter\StringFilter\MatchType; use Google\Analytics\Data\V1beta\Metric;
のように使用するディメンション、メトリクスを明示的にインポートする必要があります。
GAでの実装方法でGoogleクライアントのインスタンスを作成する部分などは割愛しますが、
$propertyId = "********";// 対象のGAプロパティID
//取得するデータの組み合わせ
$dimensions = "ga:pagePath,ga:pageTitle"; //ディメンションの設定[,で区切る]
$metrics = "ga:pageviews"; //メトリクス
//オプション
$option = array(
"dimensions" => $dimensions,
"filters" => "ga:pagePath=~^/***/***/", // フィルタする文字列
"max-results" => 10, // 最大1,000件
"sort" => "-ga:pageviews"
);
〜
〜
//データの取得
$response = $analytics->data_ga->get("ga:{$propertyId}","7daysAgo","today",$metrics,$option);
使いたいディメンション、メトリクスをStringで列挙すれば良かったものが、
GA4では都度クラスを呼ぶ必要がある。といった点でしょうか。
クレデンシャルの作成、Googleクライアントのインスタンスを作成などを自分でやる必要がなくなりシンプルになったようにも思えます。
GA4は今までのGA(UA)とは異なる全く別ツールとなります。
そのためツールの使い方や分析視点もUAとは異なるため、今回は今までのコードをGA4に置き換えたものになりますが、今後はGA4に合わせたカスタマイズが必要になってくるでしょう。
GA4ではアクセス管理画面もガラッと変わって戸惑う部分も多いですが、今後も積極的に活用していきたいですね。