[php] サイトアクセスランキングをGoogle Analyticsからデータ抽出・作成する方法
WordPressサイトでアクセスランキングを取得する場合、WordPress Popular Postsなどのプラグインを使用するが、なかなかサイトへの負担が大きいため、Google Analyticsからデータ抽出・作成する方法を模索した
結果的にはアナリティクスAPIを使用することで、Google Analyticsからある一定期間のアクセスランキングデータを抽出することができた
アナリティクスAPIを有効化する
サービスアカウントの追加からサービスアカウントを追加する
プロジェクトを選択する必要があるので、プロジェクトを選択。なければ、適当に作成
サービスアカウントを作成を選択
![]()
サービスアカウント名と説明を記入する。サービスアカウントIDは自動的に入力されるが、変えたければ変えても良い

「このサービス アカウントにプロジェクトへのアクセスを許可する」項目と「ユーザーにこのサービス アカウントへのアクセスを許可」項目は省略して、作成ボタンをクリック
サービスアカウントが作成されるので、一番右の「・・・」をクリックして「鍵の作成」をクリック

形式を聞かれるので「JSON」を選択

JSONファイルがダウンロードされる。後でPHPプログラムの中で、このJSONを参照するため、サーバにアップロードするので大切に保管する。
サービスアカウントIDをGoogle アナリティクス アカウントに追加
先程作成したサービスアカウントID「xxxxx@xxxxxx.iam.gserviceaccount.com」をコピー
GoogleAnalyticsを開きアカウントを追加する
- Google アナリティクスにログイン
- [管理] をクリックして、目的のアカウント、プロパティ、ビューに移動
- [ビュー] の列で [ユーザー管理] をクリック
- [アカウントの権限] リストで、[ユーザーを追加] の順にクリック
- xxxxx@xxxxxx.iam.gserviceaccount.comのメールアドレスを入力
Googleクライアントライブラリをインストール
Composerを利用してインストールする
cd var/www/htdocs
composer require google/apiclient:^2.0
var/www/htdocsに先程ダウンロードしたJSONファイルを「service-account-credentials.json」という名前に変更してアップロードする
またvar/www/htdocsに下記コードを実装
$VIEW_ID = “xxxxxxxx”;のところは、取得したいGoogle AnalyticsのViewIDを入力すること
require_once __DIR__ . '/vendor/autoload.php';
$analytics = initializeAnalytics();
$response = getReport( $analytics );
$report = $response->getReports()[0]->getData()->getRows();
foreach ($report as $r) {
$uri = $r->getDimensions()[0];//ここにURLが格納
echo $uri."
";
}
function initializeAnalytics() {
$KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.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 getReport( $analytics ) {
$VIEW_ID = "xxxxxxxx";
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate( "2daysAgo" );
$dateRange->setEndDate( "yesterday" );
$sessions = new Google_Service_AnalyticsReporting_Metric();
$sessions->setExpression( "ga:sessions" );
$sessions->setAlias( "sessions" );
$dimention = new Google_Service_AnalyticsReporting_Dimension();
$dimention->setName( 'ga:landingPagePath' );
$orderby = new Google_Service_AnalyticsReporting_OrderBy();
$orderby->setFieldName( "ga:sessions" );
$orderby->setOrderType( "VALUE" );
$orderby->setSortOrder( "DESCENDING" );
$request = new Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId( $VIEW_ID );
$request->setDateRanges( $dateRange );
$request->setMetrics( array( $sessions ) );
$request->setDimensions( array( $dimention ) );
$request->setOrderBys( $orderby );
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests( array( $request) );
return $analytics->reports->batchGet( $body );
}
こちらのコードはyesterdayから2daysAgoまでのアクセスが多かったURLごとに取得している。
Google Analyticsのデータからは記事タイトルが取得できないため、Wordpressのurl_to_postid関数を使用しPostIDを取得してからタイトルを表示するなどが必要となる