PHPでGoogle Analytics情報をGoogle Analytics Reporting API V4 を使って取得してみた


ga_api_000

Google Analytics にページごとのアクセス数やセッション数の情報があるので、それらを使ってランキング一覧などに使えれば便利です。Google Analytics Reporting APIを使いPHPで検証してみました。今回は、Google Developers の リファレンスとサンプルに従った検証の備忘録をまとめます。

※参考:はじめてのアナリティクス Reporting API V4: サービス アカウント向け PHP クイックスタート

Google API コンソールでプロジェクトを作成し、APIが使えるようにする

Google API コンソール で Google Analytics Reporting API を使うためにプロジェクトを作成します。プロジェクトでは使っている様々なGoogleサービスのAPI のトラッフィクやエラー状態などを管理することができます。同じAPIでも別のサイトやアプリごとに管理したい場合は別のプロジェクトとして状態を管理できます。
今回は、Google Analytics Reporting API を使います。既存のプロジェクトでAPIを管理したいならば管理APIとして追加してもいいですし、別に管理したいなら新たなプロジェクトを作成します。今回は新規作成します。

セットアップツールを 使用してプロジェクトを作成します。セットアップツールを使えば、プロジェクト作成 からライブラリ「Google Analytics Reporting API」の追加が自動化され、その後からの設定になります。

Analytics Reporting APIセットアップツールにアクセスします。

ga_api_001
今回は新規なので 「プロジェクトを作成」をクリックして「続行」ボタンをクリックします。

ga_api_002
プロジェクトが作成され Google Analytics Reporting API も有効化されました。一旦、プロジェクト名は「My Project」になっていますが、管理画面>IAM と管理>設定 からプロジェクト名は変更できます。「認証情報に進む」ボタンをクリックします。

ga_api_003
設定は上記のとおりにしました。API を呼び出す場所はPHPなのでウェブサーバにしています。「必要な認証情報」ボタンをクリックします。

ga_api_004
このプロジェクト内容を使うために認証が必要なります。つまり、このプロジェクトの Google Analytics Reporting API を使うために認証が必要となります。また、プロジェクト内容に対してどこまでの範囲を許可するか制限も設定できます。
今回は、全リリースへの完全アクセス権がある「オーナー」でサービスアカウントを作成しました。このアカウントでこのプロジェクトを使ってGoogle Analytics Reporting API を使い、Google Analytics から情報を取得します。
リファレンスが キータイプ:JSON だったのでJSONを選択しました。「次へ」ボタンをクリックします。

ga_api_005
json形式の秘密鍵がパソコンにダウンロードされました。これは認証に使うため漏洩しないように慎重に管理します。サービスアカウントのユーザであることの証明になります。

ga_api_006
これで Google Analytics Reporting API が使える準備ができました。

Googleアナリティクス にサービスアカウント を追加する

Google Analyticsの内容が誰にも見られても困ります。なので、Google Analyticsにアクセスするにはそのユーザにアクセス権限を与えないといけません。今回は、サービスアカウントで、Google Analytics Reporting API を通してGoogle Analytcs にアクセスします。当然そのアカウントにもアクセス権限を与えなければ情報を取得できません。
ga_api_007
Google Analytics にアクセスします。左下の 管理 をクリックして管理画面にアクセスします。そして ユーザ管理 をクリックします。

ga_api_008
権限を付与するユーザーに、サービスアカウントIDを入力し「追加」ボタンをクリックします。サービスアカウントID は、ダウンロードした秘密鍵のjsonファイルにも記載されています(※client_email) 。アクセス許可は、「表示と分析」を選択します。
ユーザーが作成されれば、これで Google Analytics Reporting API でデータが取得できるようになります。

データを取得したい Google Analytics の View ID を取得する

Google Analytics では、1つのアカウントで複数のサイトやアプリの情報を別々に管理することができます(プロパティ)。また、1つのドメインをフィルターなどを使ってさらに細かく分類することもできます(ビュー)。さらに共有化していれば複数のアカウントも管理できます。今回のサンプルではビューを指定して情報を取得するので、ビューのIDを取得しておきます。

ga_api_009

Account Explorer — Google Analytics Demos & Tools にアクセスし、Click here to authorize をクリックします。

ga_api_010

Analytics Demos & Tools が Google Analytics の情報を取得していいか聞いてくるので許可します。

ga_api_011

情報を取得したい アカウント、プロパティ そして ビュー を選択します。View ID が表示されるのでメモします。

PHP用の Google API クライアントライブラリ を取得する

Google Analytics Reporting API を使う前準備が終わったので、PHPから Google Analytics 情報を取得します。Google は、PHPでAPIを使うための クライアントライブラリ を提供しています。今回は Composer を使用して PHP用の Google API クライアントライブラリ を取得します。

ライブラリを配置したいディレクトリをカレントにして、コンソール画面から次のコマンドを叩きます。

composer require google/apiclient:^2.0

hoge:~/workspace/demo $ composer require google/apiclient:^2.0
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing psr/http-message (1.0.1)
    Downloading: 100%         
略
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
google/apiclient suggests installing cache/filesystem-adapter (For caching certs and tokens (using Google_Client::setCache))
Writing lock file
Generating autoload files

PHP用の Google API クライアントライブラリ がダウンロードされます。

chachamaru:~/workspace/demo $ ls
composer.json  composer.lock   vendor/
chachamaru:~/workspace/demo $

ディレクトリ vendor/ が作成され、その中に Google API クライアントライブラリ がダウンロードされました。

秘密鍵の json ファイルをサーバに配置する

サービスアカウント作成時に 認証用の json ファイルをダウンロードしました。これを service-account-credentials.json にリネームしてサーバにアップロードします。非常に重要なファイルですので、外部からアクセスできないところに置きます(※ドキュメントルート以下には極力置かない)。
※ サンプルが service-account-credentials.json なのでリネームしていますが、PHPでダウンロードしたファイル名を指定すればそのままでも問題ありません。

PHPサンプルコード

リファレンスをそのまま使います。ファイル名は HelloAnalytics.php にします。
修正箇所は以下になります。

  • 4行目の 「require_once __DIR__ . '/vendor/autoload.php';」 を Google API クライアントライブラリ の vendor へのパスに変更します。
  • 17行目の 「$KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json';」 を 秘密鍵 json ファイルへのパスとファイル名に変更します。
  • 32行目の 「$VIEW_ID = " <REPLACE_WITH_VIEW_ID> ";」 を 取得したい View ID に変更します。
<?php

// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';

$analytics = initializeAnalytics();
$response = getReport($analytics);
printResults($response);

function initializeAnalytics()
{
  // Creates and returns the Analytics Reporting service object.

  // Use the developers console and download your service account
  // credentials in JSON format. Place them in this directory or
  // change the key file location if necessary.
  $KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json';

  // Create and configure a new client object.
  $client = new Google_Client();
  $client->setApplicationName("Hello Analytics Reporting");
  $client->setAuthConfig($KEY_FILE_LOCATION);
  $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
  $analytics = new Google_Service_AnalyticsReporting($client);

  return $analytics;
}

function getReport($analytics) {

  // Replace with your view ID, for example XXXX.
  $VIEW_ID = "<REPLACE_WITH_VIEW_ID>";

  // Create the DateRange object.
  $dateRange = new Google_Service_AnalyticsReporting_DateRange();
  $dateRange->setStartDate("7daysAgo");
  $dateRange->setEndDate("today");

  // Create the Metrics object.
  $sessions = new Google_Service_AnalyticsReporting_Metric();
  $sessions->setExpression("ga:sessions");
  $sessions->setAlias("sessions");

  // Create the ReportRequest object.
  $request = new Google_Service_AnalyticsReporting_ReportRequest();
  $request->setViewId($VIEW_ID);
  $request->setDateRanges($dateRange);
  $request->setMetrics(array($sessions));

  $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
  $body->setReportRequests( array( $request) );
  return $analytics->reports->batchGet( $body );
}

function printResults($reports) {
  for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
    $report = $reports[ $reportIndex ];
    $header = $report->getColumnHeader();
    $dimensionHeaders = $header->getDimensions();
    $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
    $rows = $report->getData()->getRows();

    for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
      $row = $rows[ $rowIndex ];
      $dimensions = $row->getDimensions();
      $metrics = $row->getMetrics();
      for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
        print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
      }

      for ($j = 0; $j < count( $metricHeaders ) && $j < count( $metrics ); $j++) {
        $entry = $metricHeaders[$j];
        $values = $metrics[$j];
        print("Metric type: " . $entry->getType() . "\n" );
        for ( $valueIndex = 0; $valueIndex < count( $values->getValues() ); $valueIndex++ ) {
          $value = $values->getValues()[ $valueIndex ];
          print($entry->getName() . ": " . $value . "\n");
        }
      }
    }
  }
}

動作確認

サンプルコードをコンソールで実行します。以下のコマンドを叩きます。

php HelloAnalytics.php

hoge:~/src/demo $ php HelloAnalytics.php
Metric type: INTEGER
sessions: 2382
hoge:~/src/demo $

無事、過去7日間のセッション数が取得できました。
これで Google API クライアントライブラリ を使って Google Analytics から いろいろ情報が取得できます。引き続きライブラリの使い方をまとめていきたいと思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です