#アクセス解析
[PHP] Google Analytics Reporting APIを用いてWordPressサイトのアクセスランキングを取得してみる

何して遊ぶ?

弊社コーポレートサイトのブログのアクセスランキングを調べてみようと思ったのがきっかけである。
当サイトはWordPressで構築されているので、人気記事を出力してくれるプラグインを使えば一発なわけだが、アクセス数の信憑性がイマイチ低い気がした。F5アタックしたら水増しできてしまうのでは?とか思ったので信憑性の高いAnalyticsのセッション数を元にランク付けしようと考えたわけだ。
Analytics管理画面上やData Studioなどからでもアクセスランキングを出力させることはもちろん可能だが、さらにこの記事を書いた日時や筆者が誰であるかまで確認したかった。あと単にAnalytics API触ってみたかった。
 

要件

任意の期間の中でAnalyticsのセッション数が多かった順に20位まで出力する。表示する情報は「セッション数」「記事タイトル」「投稿日」「著者」とする。
 

下ごしらえ

Googleのリファレンスを参照。後ほどWordPressサイトに組み込む想定であるので言語はPHPを選択する。
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-php
だけでは書くことがなくなってしまうので噛み砕いていこう。

APIの有効化

とにもかくにもAPIを有効化しよう。これはGoogle Developers Consoleから行う。既存のプロジェクトを使用してもいいし、適当に新規のプロジェクトを作成してもいいだろう。
使用するAPIを選択する画面では「Analytics API」と「Google Analytics Reporting API」の2つがある。前者は旧バージョンである「Analytics Core Reporting API」と呼ばれるもの?っぽくて後者の「Google Analytics Reporting API」をおすすめしているようなのでおとなしく従う。

旧バージョンの方も触ってみたが仕様が違うだけで同等のことができる模様。

認証情報の作成

APIを叩くために必要な認証情報を作成する。ダッシュボードから認証情報画面に遷移し、認証情報を作成→サービスアカウントキーを選択しよう。
適当なサービスアカウント名を設定し、役割を選択する。全権限を持っていて問題ないのでプロジェクトオーナーにでもしておけばよいだろう。

キーのタイプはjsonを選択し作成を押下すると認証情報が記載されたjsonがダウンロードされる。これは後ほど使うので大切に保管しておこう。

Analytics側の設定

前手順で作成した認証情報を用いてAnalyticsのビューにアクセスするために、ユーザーを追加してあげる必要がある。Analyticsにアクセスして取得したいビューのユーザー管理からユーザーを追加しよう。先程ダウンロードしたjsonに含まれるclient_emailに記載されているメールアドレスを追加してあげればOKだ。
特段問題なければ全権限を付与してもいいだろうが、今回やりたいことに関しては「表示と分析」に対する権限を与えてあげれば十分だ。

サンプルプログラムを試してみる

以上で下ごしらえは完了だ。実際にプログラムを書いていこう。
まずはAPIを利用するためのライブラリを読み込まなくては話にならない。GitHubにもあがっているがComposerを使ったほうが楽だろう。
Composerを導入していない場合はこちらから
適当な作業用ディレクトリを作成し

でインストール完了だ。サンプルプログラムであるHelloAnalytics.phpをダウンロードし、ビューIDと認証情報が記載されたファイルへのパスだけ変更し実行してみよう。過去一週間のセッション数が表示されれば成功だ。

サンプルプログラムを改造する

Analytics APIを叩いて認証してレポートを受け取る、という一連の流れはこちらのサンプルプログラムで実現されているのでこのまま流用し、多少改造したものがこちら。

追加したのは
・レポート取得期間を引数で指定可能に
・ページのパスをディメンションに設定
・ブログランキングを生成したいので、ページのパスにフィルターをかけてブログのページのみを抽出
・セッション数を元に降順に並び替える
・受け取ったレポートをいい感じに吐き出す
といったあたりだろうか。簡単に解説していく。

ディメンションの追加

ページのパスをディメンションに設定するのはこんな感じ

ディメンションやメトリクスを追加したい場合はDimensions & Metrics Explorerを参照する。

ディメンションフィルターの追加

ブログのページのみ抽出するには、当サイトのブログの記事URLは/blog/数字/となっているのでそれっぽい正規表現でフィルターをかければいいだけ。だと思ったのだが意外と大変。任意のフィルターをかけたセグメントを生成しなければいけないっぽい。直接ディメンションにフィルターかけられるのでは?という気もするがGoogleのサンプルプログラムに従う。もしできたらごめんなさい、リファレンス読み直します。

結構長い。全ランキングを取得したあとで/blog/数字/が含まれる記事のみを出力させた方が間違いなく楽。今回はお勉強ということで。

ソートの追加

並び替えはこんな感じ

Requestに追加

最後にこれらをRequestに追加する。

これでブログページのパスとセッション数が返ってくるはずだ。

レスポンスからレポートを出力する

返ってきたレスポンスオブジェクトを眺めてみるとやたらと階層が深くて取り出しが大変そう。地道に構造を探りサンプルプログラムを参考に頑張る。
/blog/数字/から数字(記事ID)を取り出しIDを元に任意の情報を取ればよい。WordPress内の固定ページなどであればWordPressの関数を用いればよいが、勝手に固定ページ追加したら怒られそうなので外部から取得する。外部から取得するにはWP REST APIを叩く。

こんな感じ。なんだけど毎記事json取得してデコードして~って処理を行うのでめちゃくちゃ重いクソコードになった。先に全記事の情報を一挙に取得しておき、記事IDから照合するような仕様にした方がまだマシっぽい。
重いのとお見せできない箇所があるので公開はできないが、こんな感じでランキングを生成することができた。

一言

Analyticsは埋め込んで管理画面からぼーっと眺めているだけではなんの意味もない。その数字をどう活用するかが大事である。簡単なレポートを作成する程度であればData Studioなどが適解だろうが、より複雑な解析を行いたい場合はAPIの利用を検討してみてはいかがだろうか。
 

実際のランキング

せっかくなので当ブログ2017年トータルランキング貼っておきます。ぜひお読みください。

順位 タイトル 投稿日
1 WEBデザインに取り入れたいグラデーションの上手な使い方 2016年9月14日
2 写真をトレースしてイラストを描こう! 2015年11月20日
4 ChatWork APIを利用してメッセージを定時送信するbotをPHPで作ってみた 2017年4月14日
5 【新人Webディレクター必見】Web制作に役立つChrome拡張機能10選 2017年5月16日
6 表示URLとリンク先URLの違いを理解する 2016年4月28日
7 Googleタグマネージャを導入して面倒な解析タグ埋め込みを一元管理しよう 2017年3月7日
8 手書き風フォントの作成が簡単にできるサイトで実際に作ってみた 2015年12月15日
9 コーダーにオススメするChromeアドオン集! 2017年6月1日
10 フロントエンド商品とバックエンド商品の概念と4つの活用方法 2016年8月17日
11 プログラマがやるべき絶対にモテない趣味5選 2017年6月29日
12 システム開発とは?~初級編~ 2016年8月27日
13 タスクランナー(Gulp)を導入して快適なフロント開発環境を手に入れよう 2017年2月13日
14 webサイトで収益を上げたい!まずは知るべき収益モデル 2016年8月31日
15 Atom要注目パッケージ 2017年5月11日
16 ページ表示速度の高速化(HTML/CSS) 2015年12月9日
17 【WEBデザイナー必読】おすすめ情報ブログ5選&RSSリーダー 2016年11月30日
18 【Webディレクター必見】ゼロからはじめるWebサイト調査 -ドメイン・サーバーの調べ方- 2017年7月5日
19 困ったときに役立つアイディアの出し方 2017年1月5日
20 GoogleDataStudioって何?!使ってみたらめっちゃ便利だった! 2017年7月3日

CONTACT

この度は当社へご興味お持ちいただき
ありがとうございます。
Webに関するお悩みございましたら、
是非一度お気軽にご相談ください。
平日10:00~19:00