Analytics API x PHPでPVランキング用データを取得する方法

Analytics APIとPHPを使って、Google Analyticsのデータを取得する方法を紹介します。また、Google Analyticsデータの活用例として、PVランキング用データを取得する方法も合わせて紹介します。

なお、使用したPHPのバージョンは5.5.20です。

Analytics API使用の準備

まずは、Analytics APIを使うための準備をします。作業は、Googleが公開している、Hello Analytics API: PHP quickstart for service accountsに沿って進めていきます。

Google Developer Console上で作業

Google Developer Console上での作業は以下の流れで進めていきます。

  1. Google Developer Consoleにアクセスします。
  2. Analytics APIを有効にします。
  3. サービスアカウントを作成します。
  4. P12キーファイルをダウンロードします。

Google Developer Consoleにアクセス

  1. Google Developer Consoleにアクセスします。
  2. 使用するプロジェクトを選択します。

Analytics APIの有効化

  1. サイドバーにある、「APIと認証」の「API」を選択します。
  2. 検索窓に「Analytics API」と入力し、表示された「Analytics API」をクリックします。
  3. 「APIを有効にする」をクリックします。

Analytics APIを選択する

サービスアカウントの作成とP12キーファイルのダウンロード

  1. サイドバーにある、「APIと認証」の「認証情報」を選択します。
  2. 「新しいクライアントIDを作成」をクリックします。
  3. 「サービスアカウント」を選択し、「クライアントIDを作成」をクリックします。
  4. サービスアカウントが作成されたら「OK」をクリックします。
  5. 「新しいP12キーファイルを生成」をクリックし、P12キーファイルをダウンロードします。

これで、Google Developer Console上での操作が終わりました。ただ、後でサービスアカウントに表示されているメールアドレスを使うので、画面は開いたままにしておきます。

サービスアカウントを作成

P12キーを生成

Google Analytics上で作業

次はGoogle Analytics上での作業に移ります。ここでは、先ほど作成したサービスアカウントに対して、閲覧権限を与えます。

  1. Google Analyticsにアクセスし、「アナリティクス設定」をクリックします。
  2. アクセスしたいビューを選択し、「ユーザ管理」をクリックします。
  3. 「権限を付与するユーザー」に、Google Developer Consoleで作成したサービスアカウントのメールアドレスを入力し、「表示と分析」が選択された状態で「追加」をクリックします。

アカウントを追加

これで、Analytics側の設定が終わりました。なお、後で「ビューID」を使うので画面を開いたままにしておきます。「ビューID」は「ビュー設定」で確認できます。

サンプルコードの実行

Analytics APIを使って、Google Analyticsのデータを取得できるかを確かめてみます。まずは、作業するディレクトリに移動します。ここでは、サンプル用のディレクトリを作成して進めていきます。

$ mkdir -p ~/samples/analytics_api_sample
$ cd ~/samples/analytics_api_sample

「Google APIs Client Library for PHP」の入手

PHPからGoogle APIにアクセスするライブラリ、Google APIs Client Library for PHPを取得します。

$ git clone https://github.com/google/google-api-php-client.git ~/samples/analytics_api_sample/google-api-php-client

P12キーファイルを移動

先ほどダウンロードした、P12キーファイルをサンプル用のディレクトリ直下に「client_secrets.p12」という名前で移動します。

$ mv ~/Download/foo.p12 ~/samples/analytics_api_sample/client_secrets.p12

Analytics APIの認証処理を行うファイルを用意

サンプル用ディレクトリに、Analytics APIの認証を行うanalytics_api_helper.phpというファイルを用意します。

まず、Hello Analytics API: PHP quickstart for service accountsの「Step 3: Setup the sample」にある、「download」をクリックして「HelloAnalytics.php」をダウンロードします。ダウンロードしたら、~/samples/analytics_api_sample/下に、analytics_api_helper.phpという名前で移動します。

$ mv ~/Downloads/HelloAnalytics.php ~/samples/analytics_api_sample/analytics_api_helper.php

移動したら、その中の$service_account_email$key_file_locationを変更します。$service_account_emailには、Google Developer Consoleで作成したサービスアカウントのメールアドレスを入力します。$key_file_locationにはP12キーファイルのパスを指定します。

$service_account_email = 'サービスアカウントのメールアドレス';
$key_file_location = dirname(__FILE__) . '/client_secrets.p12';

なお、analytics_api_helper.phpで使うのはgetService関数だけなので、それ以外は削除しても問題ありません。

サンプルコード

サンプルとして、過去7日間のPVを、日別に取得してみます。コードは以下のようになります。

<?php
require_once 'analytics_api_helper.php';

// ビューIDを定義します。
define('ANALYTICS_PROFILE_ID_PROFILE_ID', '<<ビューID>>');

/**
 * 過去7日間のPVを日別に取得します。
 */
function get_daily_pv(&$analytics) {
    $li = array();  // 返り値を定義します。
    $results = $analytics->data_ga->get(
        'ga:' . ANALYTICS_PROFILE_ID_PROFILE_ID,  // ビューを指定します。
        '7daysAgo',  // 取得開始日に、1週間前の日付を指定します。
        'yesterday',  // 取得終了日に、昨日の日付を指定します。
        'ga:pageviews',  // ページビューを取得します。
        array(
            'dimensions' => 'ga:date',  // ディメンションに日付を指定します。(日別にデータを取得します。)
            'sort' => 'ga:date'  // 日付の降順に並べます。
        )
    );

    // 取得結果でループします。
    foreach ($results->getRows() as $row) {
        $li[$row[0]] = $row[1];  // 「キー: 日付、値: PV」で配列に追加します。
    }
    return $li;
}

// 認証します。
$analytics = getService();

// データを取得します。
$pv_list = get_daily_pv($analytics);
print_r($pv_list);
実行結果

サンプルコードを実行すると、以下のように日毎のPVが表示されます。

$ php get_daily_pv.php
Array
(
    [20150602] => 100
    [20150603] => 110
    [20150604] => 120
    [20150605] => 150
    [20150606] => 130
    [20150607] => 140
    [20150608] => 160
)

PVランキング用データの取得

PVランキング用データを取得するコードを紹介します。ここでは、ページビュー数ページのパス毎に取得しています。なお、ページのパスは、「https://remotestance.com/blog/2570/」の「/blog/2570/」の部分です。

また、取得対象が個別記事だけになるようにフィルタリングしています。わたしのブログの個別記事のURLは/blog/記事ID/という形式です。そのため、「filters」に「'ga:pagePath=~^\/blog\/[0-9]+\/$'」という形を指定しています。

<?php
require_once 'analytics_api_helper.php';

// ビューIDを定義します。
define('ANALYTICS_PROFILE_ID_PROFILE_ID', '<<ビューID>>');

/**
 * 指定した期間のPVランキングデータを取得します。
 */
function get_page_ranking(&$analytics, $start_date, $end_date) {
    $li = array();  // 返り値を定義します。
    $results = $analytics->data_ga->get(
        'ga:' . ANALYTICS_PROFILE_ID_PROFILE_ID,
        $start_date,
        $end_date,
        'ga:pageviews',  // ページビューを取得します。
        array(
            'dimensions' =>  'ga:pagePath',  // ディメンションにページのパスを指定します。
            'sort' => '-ga:pageviews',  // ページビューの降順に並べます。
            'max-results' => 100,  // 取得結果を100件にします。
            'filters' => 'ga:pagePath=~^\/blog\/[0-9]+\/$'  // 特定のページパスのみ取得対象にします。
        )
    );

    // 取得結果でループします。
    foreach ($results->getRows() as $row) {
        $li[$row[0]] = $row[1];  // 「キー: ページのパス、値: PV」で配列に追加します。
    }
    return $li;
}

// 認証します。
$analytics = getService();

// データを取得します。
$pv_ranking = get_page_ranking($analytics, '2015-06-01', '2015-06-08');
print_r($pv_ranking);

取得結果

PVランキング取得用コードを実行すると、以下のようになります。

$ php get_pv_ranking.php
Array
(
...
    [/blog/122/] => 19
    [/blog/125/] => 18
    [/blog/130/] => 17
    [/blog/144/] => 16
    [/blog/1440/] => 15
...
)

ディメンションと指標について

ディメンションと指標を変更したい場合は、以下のようにgetメソッドの引数を変更してあげます。例えば指標にページビュー数とセッション数、ディメンションに日付とデバイスカテゴリを指定したい場合は以下のようになります。

$metrics = 'ga:pageviews, ga:sessions';
$dimensions = 'ga:date, ga:deviceCategory';
$results = $analytics->data_ga->get(
    'ga:' . ANALYTICS_PROFILE_ID_PROFILE_ID,  // ビューを指定します。
    $start_date,
    $end_date,
    $metrics,  // 指標を指定します。
    array(
        'dimensions' => $dimensions  // ディメンションを指定します。
    )
);

なお、指定できるディメンションと指標は、Dimensions & Metrics Explorerで検索することができます。

この記事が役に立った場合、シェアしていただけると励みになります!!