コードノート

コードノートはwebを中心にテクノロジー・クリエイティブを伝えるWebメディアです。コードリンク代表、片岡亮が執筆しています。

Google Analytics APIを使って機能実装やコンテンツ改善に役立てる - PHP

GoogleAnalyticsではAPIが提供されており、それを利用することで普段管理画面で見ている様々なアクセス解析データを自由に取得することができます。

そのデータを活用すれば、アクセスランキング機能であったりの実装に役立ちます。

そこで今回は基本的なGoogleAnalyticsAPIの使い方や、その活用方法についてまとめていきます。

Google Analytics APIの使い方・参考記事

このページでもサンプルソースを記載しますが、下記記事を参考にしているだけなのでこちらも参考に。

APIの利用にあたり秘密キーファイルの取得など事前に設定が必要なのですが、当ページでは省略するので「事前準備編」の確認は必須です。

Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(事前準備編) | Lancork

Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(実践編) | Lancork

サンプルコード

今回はGooglaAnalyticsから各ページ過去30日分の、PV数・閲覧開始数・ページ閲覧時間・セッション時間を取得する内容にしておきます。

またGoogleAPIを利用するためのライブラリは「analyticsAPI」というディレクトリにアップしてあることとします。

そして取得した結果を加工して「analytics_data.json」というファイルに保存するようにしてあります。(事前にファイルを用意し書き込み権限を与えておく。)

<?php
$path = "パスを指定";

// ライブラリの読み込み
require_once $path . 'analyticsAPI/google-api-php-client/src/Google/autoload.php';
 
// サービスアカウントのメールアドレス
$service_account_email = 'サービスアカウントのメールアドレス';
 
// 秘密キーファイルの読み込み
$key = file_get_contents($path . '秘密キーファイル');
 
// プロファイル(ビュー)ID
$profile = 'プロファイルID';
 
// Googleクライアントのインスタンスを作成
$client = new Google_Client();
$analytics = new Google_Service_Analytics($client);
 
// クレデンシャルの作成
$cred = new Google_Auth_AssertionCredentials(
    $service_account_email,
    array(Google_Service_Analytics::ANALYTICS_READONLY),
    $key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}

$start_date = '30daysAgo';
$end_date = 'yesterday';
$metrics = 'ga:pageviews,ga:entrances,ga:avgTimeOnPage,ga:avgSessionDuration';
$dimensions = 'ga:pagePath';
$sort = '-ga:pageviews';
$filter = 'ga:pagepath!@/page/;ga:pagepath!@/sample/';
$max_results = 10000;
$optParams = array('dimensions' => $dimensions,'sort' => $sort, 'max-results' => $max_results,'filters' => $filter );

$result = $analytics->data_ga->get('ga:' . $profile, $start_date, $end_date, $metrics, $optParams);

$analyticsDataAr = array();
foreach($result["rows"] as $row){
    $i = 0;
    foreach($row as $r){
        $r = floor($r); //滞在時間などの数値の小数点カット
        if($i != 0){
            $analyticsDataAr[$row[0]][] = $r;
        }
        $i++;
    }
}

$analyticCount = count($analyticsDataAr);
$analyticsData = json_encode($analyticsDataAr);
file_put_contents($path . "analytics_data.json" , $analyticsData);

APIから取得したデータを$analyticsDataArの部分で加工し、配列の添え字に各ページのパスを入れるようにしています。

それによってページ上で取得したデータを扱う際、事前にanalytics_data.jsonのデータを読み込んだ上で、$pv = $analyticsData["現在のページpath"][0];とすればPV数を取得できる、といったデータ構成にしてあります。

他のデータ項目を取得したい場合

今回はPV数・閲覧開始数・ページ閲覧時間・セッション時間を取得するものにしてあるといいましたが、もちろん他にも普段管理画面上で見るすべての項目を取得可能です。

公式のドキュメントを確認すると共に、「Query Explorer」という公式が提供するツールを利用することで取得項目のテストができるので、こちらを利用した上でコードを改変していくと捗るでしょう。

Core Reporting API - 一般的なクエリ  |  アナリティクス Core Reporting API  |  Google Developers

Query Explorer — Google Analytics Demos & Tools 

フィルタの設定

また必須項目ではないですが今回サンプルということで、$filterという項目も設定してあります。この項目を設定することで特定のページパスを持つページを除外したり、ある程度以上アクセスがあるページだけを取得するといったことができます。

Analyticsの管理画面でいうアドバンスフィルタですね。よく使う項目だと思うので加えておきました。このサンプルでは、ページのパスに「/page/」「/sample/」を含むものを除外という設定にしてあります。

その他細かいフィルタ設定については下記をどうぞ。

Core Reporting API - リファレンス ガイド  |  アナリティクス Core Reporting API  |  Google Developers

データの定期取得

GoogleAnalyticsAPIは1 日 50,000 件のリクエスト制限があり、また特に今回の様にように全体データを取得するような場合は取得に時間がかかります。なので都度APIを叩くのでなく、cronなどを利用し定期的にデータを取得するのが一般的でしょう。

アクセス解析データの活用例

では取得したデータを利用し、どんな実装ができるのかいくつか考えてみましょう。

機能追加

  • 週間・月間などのアクセスランキング生成
  • 閲覧ページの合計閲覧者数表示

wordpressなどCMSの場合、こういった機能の実装はプラグインを使えば簡単にできますが、独自に製作している場合はそれがないので今回のように取得したデータを使い実装する必要がありますね。

またwordpressを利用している際もページのキャッシュ化をしていると、プラグインが正しくアクセスを取得できていないケースがあるので、そういった時はAnalyticsのデータに頼ることが出来て良いです。

コンテンツの見直し

個人的にはこちらの目的で利用することも多いです、例えばアクセスや閲覧時間が少ないページだけを取得するようにしておけば、コンテンツの見直しに役立ちます。

ただ、それだけであればカスタムレポートを定期的にメールで飛ばす設定にしたり、GoogleDocsのアドオン「Google Analytics」を利用すれば良かったりするんですけどね。

tech.pepabo.com

とはいえ、機能実装ついでに下記のようなSlackに通知を送るコードと組み合わせて、アクセスが少ないページをslackに投稿するといったなどの設定にしておくと、いちいちエクセルを開いたり、GoogleDriveのページを開いたりといった手間なく、簡単にデータが見られるので非常に助かります。

qiita.com

特にチームでやっている場合は、コンテンツ改善の担当者だけがレポートを見てるという状態よりも、slackで全員が改善の余地があるページを簡単に見られるようにしておくという環境構築は大事だったりしますのでぜひ。