[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を開きアカウントを追加する

  1. Google アナリティクスにログイン
  2. [管理] をクリックして、目的のアカウント、プロパティ、ビューに移動
  3. [ビュー] の列で [ユーザー管理] をクリック
  4. [アカウントの権限] リストで、[ユーザーを追加] の順にクリック
  5. 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を取得してからタイトルを表示するなどが必要となる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です