[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を取得してからタイトルを表示するなどが必要となる