シリーズ3回目は、GAを使った「最近の人気記事」を表示するWPプラグインを作ります。
② Google API PHPクライアントインストールとデモ
③ WordPressで使えそうなものを作成する
***
今回は、「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)
php
function 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)
php
function 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]
結果(※タイトルは含みません)
[sakigapp num=5 start=365daysAgo end=today]
データの対象期間( start, end )の検証や、リスト対象外のページ指定( fillter で hardcoding している部分)ができるようにする等、まだまだ改良の余地たっぷりですが、ひとまず Google Analytics のデータを使えるようになりました!
***
Google Analytics Reporting API は、今回のような Popular Posts 一覧を動的に取得するというよりは、バッチ的に使う方向にあるのかな?という感じです。
コホートやライフタイムバリューレポートなど複雑で高度なレポートも作成できるようになりました。楽しみが増えましたね。
Google Analytics Reporting API シリーズはとりあえず今回でおしまいです。お疲れさまでした。