プログラムから Core Reporting API を使って個別記事のアナリティクスデータを取得するにはフィルターを使う必要があります。
アナリティクスデータを取得する方法については、以前にも下記記事で紹介していますのが、その続編としてフィルターの使い方を紹介します
フィルターとは
フィルターとは、ディメンションやメトリックで指定した要求に対する結果データを制限するもので、特定のデータのみを抽出または除外したい場合に使用します
クエリー結果の各行はフィルタに対してテストされ、条件が一致する場合は保持され、一致しない場合は廃棄されます。
英語の得意な方は、Core Reporting API (v3)の説明を読んで頂ければと思いますが、概略だけ紹介します
https://developers.google.com/analytics/devguides/reporting/core/v3/reference
- Google APIクライアントライブラリは自動的にフィルタ演算子をURLエンコードします
- ディメンションを集約する前にフィルタリングして、メトリックを返します
- メトリックを集約した後にフィルタリングを行います
- ディメンションやメトリックを組み合わせてフィルタすることができます
Filtersの基本形式
ga:name operator expression
name | フィルタリングするディメンションまたはメトリックの名前 |
operator | 使用するフィルタ一のオペレータータイプ |
expression | 正規表現による一致や不一致等の条件式 |
メトリックフィルターのオペレータ
Operator | エンコード | 例 | |
== |
等しい | %3D%3D |
filters=ga:timeOnPage%3D%3D10 |
!= |
等しくない | !%3D |
filters=ga:timeOnPage!%3D10 |
> |
より大きい | %3E |
filters=ga:timeOnPage%3E10 |
< |
未満 | %3C |
filters=ga:timeOnPage%3C10 |
>= |
以上 | %3E%3D |
filters=ga:timeOnPage%3E%3D10 |
<= |
以下 | %3C%3D |
filters=ga:timeOnPage%3C%3D10 |
ディメンションフィルターのオペレータ
== |
一致 | %3D%3D |
filters=ga:city%3D%3DIrvine |
!= |
不一致 | !%3D |
filters=ga:city!%3DIrvine |
=@ |
部分文字列を含む | %3D@ |
filters=ga:city%3D@York |
!@ |
部分文字列を含まない | !@ |
filters=ga:city!@York |
=~ |
正規表現の一致 | %3D~ |
filters=ga:city%3D~%5ENew.* |
!~ |
正規表現の不一致 | !~ |
filters=ga:city!~%5ENew.* |
フィルタ式のルール
- URL-予約文字 — &などの文字は URLエンコードする必要があります
- 予約文字 — セミコロン、カンマ、バックスラッシュはエスケープする必要があります
- セミコロン
\;
- カンマ
\,
- バックスラッシュ
\\
- セミコロン
- 正規表現 — =〜と!〜演算子を使用して正規表現を使用することができます
- 正規表現は Perl の正規表現に準拠
- 正規表現の条件式は128文字以内
- 正規表現は大文字小文字を区別しない
フィルタの組み合わせ
フィルタはORとANDブール論理を使用して組み合わせることができます
OR
OR演算子は、カンマ(、)を使用して定義されます
AND演算子よりも優先されて、同じ式でディメンションとメトリックを組み合わせるために使用することはできません。
例. 国(米国またはカナダ)のいずれかである:
ga:country==United%20States,ga:country==Canada
AND
AND演算子は、セミコロン(;)を使用して定義されます
OR演算子に先行されており、同じ式でディメンションとメトリックを組み合わせるために使用することができます。
例. 国は米国で、ブラウザはFirefoxです
ga:country==United%20States;ga:browser==Firefox
個別記事のページビューを取得してみる
フィルターの概要がわかったところで個別記事のアナリティクスデータを取得してみます
個別記事を特定するには、フィルターに ga:pagePath を使います
アナリティクスのコンテンツデータのサマリーを見るとページビューの多い記事順に表示されています
ここに表示されているページデータが pagePath です
サイト名を除いたパーマリンクをエンコードしたものです
記事タイトルは、WordPress から get_permalink()関数を使って取得出来るので、あとはフィルターを使用すれば特定記事のアナリティクスデータを取得出来るのですが、ちょっと工夫が必要です
一番の問題は記事のタイトルが長過ぎることです
長めの日本語のタイトルがエンコードされると256文字を超える場合もあります (^_^;)
特定のページを絞り込むためには、本当はタイトル全文が等しいか判定できれば良いのですが、128文字の制限内で正規表現を使って個別ページを絞り込んであげなければなりません
例えば 同じようなタイトルの記事が複数ある場合(比較的同じ言い回しのタイトルを使いがちなので)
OXの使い方その1、OXの使い方その2 のように後半部分がちょっとだけ違う場合と、OOの使い方、XXの使い方のように前半部分がちょっとだけ違う場合が考えられます
その場合にタイトルの一部を用いた正規表現の検索では、ひとつの記事に絞り込めない可能性もあります
そこは、仕様上回避できないので、前半50文字程度 と 後半50文字程度に分けて、その間を正規表現のメタ文字 .* でつなげてフィルタリングします
filters に ga:pagePath=~(パーマリンク前半部).*(パーマリンク後半部)
メタ文字 .* は、改行を除く全ての文字の0回以上の繰り返しです
この辺の処理はプログラム内で簡単に処理できるので、これでほとんどの場合で1つの記事に特定することが出来るはずです (^^)
正規表現は、なれないとなかなか判り難いかも知れませんが、Query Explorer サイトでいろいろ試せるのでちょっと実行させてみます
どうやらうまく行ったみたいです (^^)
あとは、この処理をプログラムへ組み込めば個別記事のアナリティクスデータをいろいろ取れそうです