Google Analytics Reporting API V4 を使う③

シリーズ3回目は、GAを使った「最近の人気記事」を表示するWPプラグインを作ります。

***

今回は、「WordPressで使えそうなものを作成する」ということで、Google Analytics を使って過去1か月のPV数降順リストを表示するプラグインを作ってみます。

ページ別PV数取得ロジック

② Google API PHPクライアントインストールとデモで使ったサンプルプログラムを元にします。
ここでは、getGAPopularPage.php というファイル名にします。
まず、データ取得ロジック部分の getReport 関数を変更します。

Reporting APIにデータをリクエストするには、ReportRequest オブジェクトを作成します。
ReportRequest オブジェクトには、
・viewId →データを取得したいビューのID。サービスアカウントに権限付与のこと。→設定済
・dateRanges
・metrics
の3つが最低限必要となっています。

■ dateRanges
 リクエストする期間です。最大2つの期間を指定できます。
 今回は対象期間のstart, end を指定できるよう変数にします。

php// Create the DateRange object.
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate($start);
$dateRange->setEndDate($end);

■ metrics
 リクエストする指標です。少なくとも1個は必要で、10個まで指定できます。
 サンプルプログラムではセッション数でした。今回は、PV数を取得します。

php// Create the Metrics object.
$sessions = new Google_Service_AnalyticsReporting_Metric();
$sessions->setExpression("ga:pageviews");
$sessions->setAlias("pageviews");

さらに、
■ dimention
 ディメンションを指定します。
 目的は「ページ別PV数を多い順に取得する」ことなので、ページパスとページタイトルを指定します。

php// Create the Dimension object.
$dimention = new Google_Service_AnalyticsReporting_Dimension();
$dimention->setName("ga:pagePathLevel1");

$dimention2 = new Google_Service_AnalyticsReporting_Dimension();
$dimention2->setName("ga:pageTitle");
...
$request->setDimensions(array($dimention,$dimention2));

pagePathにもいくつか種類がありますので、適したものを選択してください。

※ディメンションと指標の有効な組み合わせは、ディメンションと指標の参照ツールで確認できます。

■ DimensionFilter
 トップページやカテゴリーページ等、一覧ページは除きたいのでフィルターを設定します。

php$filter = new Google_Service_AnalyticsReporting_DimensionFilter();
$filter->setDimensionName("ga:pagePathLevel1");
$filter->setNot(true);
$filter->setOperator("IN_LIST");
$filter->setExpressions( ["/sakidesign.com", "/category/"] );

$filters = new Google_Service_AnalyticsReporting_DimensionFilterClause();
$filters->setFilters(array($filter));
...
$request->setDimensionFilterClauses($filters);

■ orderBys
 pageviewsの降順に並び替えます。

php  $orderby = new Google_Service_AnalyticsReporting_OrderBy();
  $orderby->setFieldName("ga:pageviews");
  $orderby->setOrderType("VALUE");
  $orderby->setSortOrder("DESCENDING");
...
  $request->setOrderBys($orderby);

ここまでで、欲しいデータのリクエストができました。

ソースコード(function getReport)
phpfunction getReport($start, $end, $analytics) {

  // Replace with your view ID, for example XXXX.
  $VIEW_ID = "xxxxx";//対象にする GA View ID

  // Create the DateRange object.
  $dateRange = new Google_Service_AnalyticsReporting_DateRange();
  $dateRange->setStartDate($start);
  $dateRange->setEndDate($end);

  // Create the Metrics object.
  $sessions = new Google_Service_AnalyticsReporting_Metric();
  $sessions->setExpression("ga:pageviews");
  $sessions->setAlias("pageviews");

  // Create the Dimension object.
  $dimention = new Google_Service_AnalyticsReporting_Dimension();
  $dimention->setName("ga:pagePathLevel1");

  $dimention2 = new Google_Service_AnalyticsReporting_Dimension();
  $dimention2->setName("ga:pageTitle");

  // Filter
  $filter = new Google_Service_AnalyticsReporting_DimensionFilter();
  $filter->setDimensionName("ga:pagePathLevel1");
  $filter->setNot(true);
  $filter->setOperator("IN_LIST");
  $filter->setExpressions( ["/sakidesign.com", "/category/"] );

  $filters = new Google_Service_AnalyticsReporting_DimensionFilterClause();
  $filters->setFilters(array($filter));

  // OrderBy
  $orderby = new Google_Service_AnalyticsReporting_OrderBy();
  $orderby->setFieldName("ga:pageviews");
  $orderby->setOrderType("VALUE");
  $orderby->setSortOrder("DESCENDING");

  // Create the ReportRequest object.
  $request = new Google_Service_AnalyticsReporting_ReportRequest();
  $request->setViewId($VIEW_ID);
  $request->setDateRanges($dateRange);
  $request->setMetrics(array($sessions));
  $request->setDimensions(array($dimention));
  $request->setDimensionFilterClauses($filters);
  $request->setOrderBys($orderby);

  $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
  $body->setReportRequests( array( $request) );
  return $analytics->reports->batchGet( $body );
}

ページ別PV数のアウトプット

次にアウトプット部分の printResults 関数を改造します。
元にしたサンプルプログラムファイルは、欲しいデータのJSONを返すプログラムにします。

取得したい件数を渡して、array("ページパス","ページタイトル","PV数") のセットを返すようにします。

こんな感じで。

ソースコード(function printResults)
phpfunction printResults($reports,$num) {
	$report = $reports[0];
	$rows = $report->getData()->getRows();

	$data = array();
	for ( $rowIndex = 0; $rowIndex < count($rows) && $rowIndex < $num; $rowIndex++) {
		$row = $rows[ $rowIndex ];

		$dimensions = $row->getDimensions();
//		print( $dimensions[0] ); //pagePathLevel1
//		print( $dimensions[1] ); //pageTitle

		$metrics = $row->getMetrics();
		$values = $metrics[0];
		$value = $values->getValues()[0]; //pageviews
//		print($value);//pageviews

		$data[] = array($dimensions[0],$dimensions[1],$value);
    }
	$data = json_encode( $data );

	Header("Content-Type: application/json; charset=utf-8");
	Header("X-Content-Type-Options: nosniff");
	echo $data;
}

取得件数を渡すので、printResults関数呼び出し部分などもちょっと変更します。

php//printResults($response);
$num = isset($_REQUEST["num"]) ? intval($_REQUEST["num"]) : 10;//デフォルト10件取得
printResults($response,$num);

WPプラグイン化

いよいよWordPressで使える形にします。

ウィジェットにしてサイドバーに配置でもいいかなと思いますが、手っ取り早くショートコードにしてどこでも配置できるようにしようと思います。
※シリーズ①②の、サーバーに GA API PHP Client Library のインストールと サービスクライアントの設定が完了していることを前提にします。
 Google Analytics Reporting API V4 を使う① Google API Console と Google Analytics での作業
 Google Analytics Reporting API V4 を使う② Google API PHPクライアントインストールとデモ

機能として、
・プラグインの設定画面で、
 1) GA Report API の autoload.php へのパス
 2) GA View ID
 3) KEY JSONファイルへのパス
 をセットし、これを使って GA View データを取得する。
・ショートコード化(表示件数、対象期間を指定できる)
・最近の人気記事一覧(=PV数順ページ一覧)は、タイトルにページリンクをつける。
・アクセスの度にView取得もあれなので24時間キャッシュしておく。とりあえず1つ使いまわし。
を想定してます。

で、できたのがこちら。
saki-ga-popular-posts (GitHub repo)

デモ

■管理画面→プラグインの設定画面

■ショートコード

ショートコード[sakigapp num=5 start=30daysAgo end=today]

【パラメーター】
・num : 件数(default:10)
・start : 取得期間 from(default:7daysAgo)
・end : 取得期間 to(default:today)

※デフォルトは、7日前から今日までのPV数多い順10件です。

ショートコード[sakigapp]
[sakigapp num=10 start=7daysAgo end=today]

結果(※タイトルは含みません)

* Recent Popular Posts *
[sakigapp num=5 start=365daysAgo end=today]

データの対象期間( start, end )の検証や、リスト対象外のページ指定( fillter で hardcoding している部分)ができるようにする等、まだまだ改良の余地たっぷりですが、ひとまず Google Analytics のデータを使えるようになりました!

***

Google Analytics Reporting API は、今回のような Popular Posts 一覧を動的に取得するというよりは、バッチ的に使う方向にあるのかな?という感じです。
コホートやライフタイムバリューレポートなど複雑で高度なレポートも作成できるようになりました。楽しみが増えましたね。

Google Analytics Reporting API シリーズはとりあえず今回でおしまいです。お疲れさまでした。

コメントを残す

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