PHPで Google Analytics API を使ってランキング!セッション数の多い順にページ情報を取得する


ga_api_000

サイトを作っていると、反響のあるページをランキング形式で表示したくなります。集計を取るプログラムを組み込んでないけど Google Analytics ならとりあえず組み込んでいるよ! ってサイトも多々見かけるので 、Google Analytics のデータを使ってランキング情報を取得できないか検証してみた備忘録です。

API パラメータ

今回、取得するランキングの情報は以下のようにしました。

過去1年間で、セッション数が多いページ 上位10件

メトリックス(指標) セッション数
ディメンション(データ属性) ページURL
集計期間 1年前〜今日
並び順 セッション数の多い順
取得数 10

Google Analytics APIに、具体的にどのような メトリックス(指標) や ディメンション(データ属性) の値を渡すのかは、 Dimensions & Metrics Explorer  |  アナリティクス Reporting API V4  |  Google Developers から調べることができます。

ga_api_120

Dimensions & Metrics Explorer で調べた結果、API に渡すパラメータは以下のようになりました。

Metrics (指標) ga:sessions
Dimensions (データ属性) ga:pagePath
DateRanges (期間) [StartDate] 1年前
[EndDate] 今日
SortOrder (並び順) [FieldName] ga:sessions
[OrderType] 値
[SortOrder] 降順
PageSize (取得数) 10

ランキングを取得する

PHPで ランキング情報を取得してみます。今回は、Google が提供している Google API PHP Client Library を使ってデータを取得します。
PHPでの基本的なデータの取得方法は、別ブログ「PHPでGoogle Analytics情報をGoogle Analytics Reporting API V4 を使って取得してみた」を参考にしてください。

PHPのサンプルプログラムは以下のようになります。ファイル名は HelloAnalytics.php にしました。

<?php

// Load the Google API PHP Client Library.
require_once __DIR__ . '/../src/demo/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__ . '/../src/demo/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>";

  // メトリックス(指標) セッション数 の設定
  $sessions = new Google_Service_AnalyticsReporting_Metric();
  $sessions->setExpression("ga:sessions");
  $sessions->setAlias("sessions");
  
  //ディメンション(データ属性) ページURL 設置
  $dimension = new Google_Service_AnalyticsReporting_Dimension();
  $dimension->setName("ga:pagePath");

  // 集計期間 1年前〜今日 設定
  $dateRange = new Google_Service_AnalyticsReporting_DateRange();
  $dateRange->setStartDate(date("Y-m-d",strtotime("-1 year")));
  $dateRange->setEndDate("today");

  //並び順 セッション数の多い順 設定
  $ordering = new Google_Service_AnalyticsReporting_OrderBy();
  $ordering->setFieldName("ga:sessions");
  $ordering->setOrderType("VALUE");
  $ordering->setSortOrder("DESCENDING");

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

  // 表示順
  $request->setOrderBys($ordering); // note this one!

  //ページサイズの設定
  $request->setPageSize(10);


  $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

demo:~/workspace $ php HelloAnalytics.php 
ga:pagePath: /WP/blog/20100411_1828.html
Metric type: INTEGER
sessions: 8324
ga:pagePath: /WP/blog/20150711_2627.html
Metric type: INTEGER
sessions: 5842
ga:pagePath: /WP/wordpress/archives/191
Metric type: INTEGER
sessions: 5724
ga:pagePath: /WP/blog/20150504_2542.html
Metric type: INTEGER
sessions: 5678
ga:pagePath: /WP/blog/20141124_2392.html
Metric type: INTEGER
sessions: 4070
ga:pagePath: /WP/blog/20100224_1800.html
Metric type: INTEGER
sessions: 3483
ga:pagePath: /WP/blog/20150627_2565.html
Metric type: INTEGER
sessions: 3201
ga:pagePath: /WP/wordpress/archives/42
Metric type: INTEGER
sessions: 2728
ga:pagePath: /WP/blog/20130815_2337.html
Metric type: INTEGER
sessions: 2480
ga:pagePath: /WP/wordpress/archives/164
Metric type: INTEGER
sessions: 2402
demo:~/workspace $ 

無事、過去1年間のセッション数ページランキングが取得できました。
これで Google API クライアントライブラリ を使って Google Analytics から ランキング情報が取得できます。引き続きフィルターなどを使って削除ページなど除外して取得できないか調査していきたいと思います。


コメントを残す

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