技術資料

PHPでGoogle Analyticsデータを取得する初心者向けガイド:APIの設定からコード例まで

2024.12.25

Google Analytics のデータを API 経由で PHP で取得する手順の解説です。

Google Analytics Data API の有効化

Google Analytics Data API を利用するためには、Google Cloudのアカウントが必要です。

Google Cloud のアカウントを作成し、サインインしたら、「プロジェクト」を選択、または新規に作成。

続いてコンソール画面上部の検索ボックスで「Google Analytics Data API」を検索して、API管理ページを開きます。
※似た名前の「Google Analytics API」というのもあるので注意

「有効にする」で、Google Analytics Data API を有効にします。

サービスアカウントの作成とAPIキーの作成

Google Analytics Data API のページから「認証情報」⇒「認証情報を作成」⇒「サービスアカウント」と進んで、サービスアカウントを作成します。

作成したサービスアカウントには、自動でメールアドレスが設定されます。このアドレスは後で使うのでメモっておきます。

サービスアカウントの一覧画面で、編集アイコンをクリックして編集画面を開き、「鍵」タブに移動。

「キーを追加」⇒「新しい鍵を作成」で、JSON形式を選択して、鍵を作成します。

秘密鍵が生成され、JSON形式でダウンロードできるので、ローカルに保存します。このJSONファイルは、後でPHPからAPIを呼び出す際に使用します。

Google Analytics 側の設定

続いて、上記で作成したサービスアカウントと、APIでデータを取得したい Google Analyticsのアナリティクスアカウントの紐付けを行ないます。

Google Analytics にログインし、「管理」⇒「アカウント」⇒「アカウントのアクセス管理」と進み、アカウントの追加を行ないます。

この際、追加するアカウントのメールアドレスとして、先ほど作成したサービスアカウントのメールアドレスを指定。権限は「閲覧者」で良いと思います。

あと、データを取得したいプロパティのIDをメモっておきましょう。プロパティ一覧で確認できる9桁程度の数値です。あるいは、プロパティの画面を開いたときにURLに含まれている「p000000000」の部分の「p」を除いた数値部分がプロパティIDです。

APIを使えるようにするための、Googleのアカウント周りの設定は以上。

ライブラリのインストール

PHPで Google Analytics Data API を利用するためのライブラリを composer でインストールします。

$ composer require google/analytics-data

PHP のコードサンプル

準備ができたので、ひとまずシンプルに「直近7日間のアクセスデータを上位25件」取得するコードを書いてみます。

取得するデータは以下。

pagePath
ウェブページのパス
pageTitle
ページのタイトル
activeUsers
サイトにアクセスした個別のユーザーの数
screenPageViews
ユーザーが閲覧したウェブページの数。いわゆるページビュー
screenPageViewsPerUser
アクティブユーザー1人あたりのユーザーが閲覧したウェブページの数
userEngagementDuration
ウェブサイトがユーザーのデバイスでフォアグラウンド表示されていた合計時間(秒単位)

「activeUsers」「screenPageViews」の降順でデータを取得します。

// APIキーのJSONファイルのパス(必ずブラウザではアクセスできない場所に設置すること)
putenv("GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential/xxxxxxxxxx.json");

// 使用するライブラリの指定
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;
use Google\Analytics\Data\V1beta\OrderBy;
use Google\Analytics\Data\V1beta\OrderBy\MetricOrderBy;
use Google\Analytics\Data\V1beta\RunReportRequest;

$property_id = '123456789'; // AnalyticsのプロパティID
$day = 7; // 7日間のデータを指定
$limit = 25; // 上位25件取得

$client = new BetaAnalyticsDataClient();
// 日付範囲設定
$start_date = (new DateTime())->modify("-{$day} days")->format('Y-m-d');
$date_range = array(
    new DateRange([
        'start_date' => $start_date,
        'end_date' => 'today',
    ]),
);
// ディメンション設定
$dimensions = array(
    new Dimension(['name' => 'pagePath']),
    new Dimension(['name' => 'pageTitle']),
);
// 指標設定
$metrics = array(
    new Metric(['name' => 'activeUsers']),
    new Metric(['name' => 'screenPageViews']),
    new Metric(['name' => 'screenPageViewsPerUser']),
    new Metric(['name' => 'userEngagementDuration']),
);
// 並び替え設定
$order_by = array(
    new OrderBy([
        'desc' => TRUE,
        'metric' => new MetricOrderBy(['metric_name' => 'activeUsers']),
    ]),
    new OrderBy([
        'desc' => TRUE,
        'metric' => new MetricOrderBy(['metric_name' => 'screenPageViews']),
    ]),
);
// リクエスト作成
$request = (new RunReportRequest())
    ->setProperty('properties/'.$property_id)
    ->setDateRanges($date_range)
    ->setDimensions($dimensions)
    ->setMetrics($metrics)
    ->setOrderBys($order_by)
    ->setLimit($limit);
$response = $client->runReport($request);
if(!$response){
    // エラー処理
    print "Error: Analytics Data API does not respond.";
    exit;
}
// 取得したデータの整形
$access_ranking = array();
foreach ($response->getRows() as $row) {
    $line = (object)array();
    $line->path = $row->getDimensionValues()[0]->getValue();
    $line->title = $row->getDimensionValues()[1]->getValue();
    if($line->path == '/') $line->title = 'トップページ';
    $line->active_user = $row->getMetricValues()[0]->getValue();
    $line->page_view = $row->getMetricValues()[1]->getValue();
    $line->pv_per_user = $row->getMetricValues()[2]->getValue();
    $line->duration = $row->getMetricValues()[3]->getValue();
    $access_ranking[] = $line;
}

var_dump($access_ranking);

その他のディメンションや指標のデータを取得したい場合は、公式リファレンスのディメンション指標の一覧を参照。

PHPで扱う日付と時刻の基礎:DateTimeImmutableの活用例

2024.12.07

PHPで日付や時刻を操作する際、DateTimeImmutableクラスを使用することで、データの安全性と効率的な処理が実現します。本記事では、基本的な使い方から日付の加減算、フォーマット指定、時刻比較まで、実践的な例を通じて解説します。

PHP

OGP画像作成を効率化:PHPを使った自動生成方法を解説

2024.11.21

SNSシェアに欠かせないOGP画像、毎回手作業で作成するのは手間がかかりますよね。本記事では、PHPを使って記事タイトルを含むOGP画像を自動生成する方法を解説します。テンプレート画像を活用した簡単な手順をぜひお試しください。

PHP

PHPによるCSRF対策入門:トークン生成から認証までの流れを解説

2024.11.19

フォーム送信時のセキュリティを高めるためには、CSRF対策が欠かせません。本記事では、PHPでのトークン生成から認証チェックまで、実装手順を具体的に解説します。

PHP

PHPとPerlでファイルパーミッションを変更する方法(chmod関数)

2024.11.16

PHPとPerlには、ファイルのパーミッションを変更するためのchmod関数が標準で用意されています。この記事では、PHPとPerlそれぞれのchmod関数を使ったファイルパーミッション変更の基本的な使い方を紹介します。

Perl PHP

阿部辰也へのお仕事の依頼・お問い合わせ

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP