GAのデータとデータベースのデータをかけ合わせて使いたかったので、APIの設定からphpの開発までのメモとして残します。
やること
- Google Apisにプロジェクト作成
- Google Apisにアカウント作成
- APIの権限追加
- APIから参照する専用GAアカウント作成
- GA APIのライブラリダウンロード
- phpの開発
Google Apisにプロジェクト作成
Google Apisにプロジェクト作成から行います。
https://console.developers.google.com/
初めての方はまだプロジェクトを作成したことが無いと思いますので、以下の画面が表示されますので、画面右にある「プロジェクトを作成」ボタンをクリックします。
ポップアップが表示されますので、そのまま「作成」ボタンをクリックします。
プロジェクトの作成画面が表示されますので、任意のプロジェクト名を入力します。(とりあえず「test project」と入力しました。)
プロジェクト名を入力したら「作成」ボタンをクリックするとローディングの後、プロジェクトが作成されます。
これでGoogle Apisにプロジェクトが作成されました。
次にアカウント作成を行います。
Google Apisにアカウント作成
プロジェクトを作成したら次にApisにアカウントを作成します。
左メニューの「認証情報」をクリックすると、下の画像のようにポップアップが表示されますので「認証情報を追加」ボタンをクリックすると認証パターンがいくつか出てきます。
今回必要になるのは「サービスアカウントキー」なので、それをクリックします。
サービスアカウントキーの作成画面に遷移したら、まずサービスアカウントのプルダウンで「新しいサービスアカウント」だけあるので選択します。
「新しいサービスアカウント」を選択すると、サービスアカウント名、役割、サービスアカウントIDが表示されます。
ここで作成されるアカウントは、データ抽出したいGAに対して作成するアカウント情報となります。
サービスアカウント名には何のアカウントなのか分かる名前を入力します。
(ここでは「test project」としています。)
役割ですが特別な権限は不要なので、プルダウン内から「Project > 閲覧者」を選択します。
キーのタイプは「json」が選択されていますが、このままで良いです。
作成が完了したら、ポップアップで下記画面が表示されると同時に、認証キーがjsonファイルでダウンロードされます。
【注意】
認証キーとなるjsonファイルはこの場でしかダウンロードされないため、失くしてしまった場合は再度サービスアカウントキーの発行を行う必要があります。
次に実際使用するAPIの権限追加を行います。
APIの権限追加
プロジェクト作成が完了したら最初の画面に戻りますが、メッセージにも書いてある通りで、今使えるAPIがない状態です。
次にAPIを有効にしてみますので、画面左メニューの「ライブラリ」をクリックします。
ライブラリ画面ではGoogleで使うことができるAPIのリストがたくさん表示されています。
今回の目的は、Google Analytics APIを使うことなので、検索窓に「Analytics API」と入力すると、下記画面のように候補が表示されます。
ここでは左上の「Analytics API」をクリックします。
「Analytics API」の詳細画面が表示されますので「有効にする」ボタンをクリックします。
ローディングが走り、「Analytics API」が使えるようになります。
APIが使えるようになったら最初に戻りますが、表示がガラッと変って、使えるようになったAPIのリストと、使用したAPIのトラフィック情報等が表示されます。
これでApisでの設定が一通り完了となります。
次にデータ取得したいGAにアカウントを作成します。
APIから参照する専用GAアカウント作成
GAからデータを取得するには、API実行するユーザーをGAに登録しておく必要があります。
GAにログイン後、設定のビューにある「ユーザー管理者」をクリックします。
作成するユーザーは、先に作成したサービスアカウントのjsonファイル内の「client_email」のアドレスを、メールアドレスに入力します。
権限は「表示と分析」にします。(閲覧ができれば問題ない)
設定できたら右上の「追加」ボタンをクリックすると作成ができます。
これでGAアカウント追加が完了となります。
GA APIのライブラリダウンロード
以下コマンドでライブラリをダウンロードできます。
作業スペースに移動してコマンドを実行してください。
composer require google/apiclient:^2.0
ダウンロードしたらvenderというディレクトリが作成されます。
phpの処理でvendor/autoload.phpをincludeします。
なお、サンプルソースは以下公式にも記載があります。
https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-php?hl=ja
phpの開発
サンプルソースを参考に一部使いやすいように改変。
<?php
require_once __DIR__ . '/vendor/autoload.php';
$records = [];
$analytics = initializeAnalytics();
$profileId = getFirstProfileId($analytics);
do {
unset($rows);
$rows = [];
$results = getResults($analytics, $profileId, $count);
if (count($results->getRows()) > 0) {
$rows = array_merge($records, $results->getRows());
}
$count++;
}
while (!empty($rows));
function initializeAnalytics() {
$KEY_FILE_LOCATION = "{ここにjsonキーファイルパスを記述}";
$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 getFirstProfileId($analytics) {
$accounts = $analytics->management_accounts->listManagementAccounts();
if (count($accounts->getItems()) > 0) {
$items = $accounts->getItems();
$firstAccountId = $items[0]->getId();
$properties = $analytics->management_webproperties->listManagementWebproperties($firstAccountId);
if (count($properties->getItems()) > 0) {
$items = $properties->getItems();
$firstPropertyId = $items[0]->getId();
$profiles = $analytics->management_profiles->listManagementProfiles($firstAccountId, $firstPropertyId);
if (count($profiles->getItems()) > 0) {
$items = $profiles->getItems();
return $items[0]->getId();
}
else {
throw new Exception('No views (profiles) found for this user.');
}
}
else {
throw new Exception('No properties found for this user.');
}
}
else {
throw new Exception('No accounts found for this user.');
}
}
function getResults($analytics, $profileId, $count = 0) {
$startIndex = ($count > 0) ? ($count * 10000) + 1 : 1;
$res = $analytics->data_ga->get(
'ga:' . $profileId,
'7daysAgo',
'today',
'ga:users,ga:pageviews,ga:sessions',
[
'dimensions' => 'ga:date,ga:pagePath',
'sort' => 'ga:date',
'max-results' => 10000,
'start-index' => $startIndex
]
);
return $res;
}
サンプルソースでは、7日前〜今日までの「ユーザー」「ページビュー数」「セッション」「日付」「ページ」を、日付昇順で取得する指定をしています。
MetricsやDimentionの値は以下マニュアルを参考にしてください。
https://developers.google.com/analytics/devguides/reporting/core/dimsmets
APIの実行回数について
プロジェクトあたり 1日 50,000 件のリクエスト
IP アドレスごとに、1秒あたりのクエリ数(QPS)は 10件まで。
1日あたりの割り当ては、太平洋標準時の午前0時に更新されます。
詳しくは以下公式をご確認ください。
https://developers.google.com/analytics/devguides/reporting/core/v3/limits-quotas?hl=ja