個別記事のアナリティクスデータ取得はフィルターがポイント

プログラムから 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
ページ滞在時間が 10秒
!= 等しくない !%3D filters=ga:timeOnPage!%3D10
ページ滞在時間が 10秒でない
> より大きい %3E filters=ga:timeOnPage%3E10
ページ滞在時間が 10秒より大きい
< 未満 %3C filters=ga:timeOnPage%3C10
ページ滞在時間が 10秒未満
>= 以上 %3E%3D filters=ga:timeOnPage%3E%3D10
ページ滞在時間が 10秒以上
<= 以下 %3C%3D filters=ga:timeOnPage%3C%3D10
ページ滞在時間が 10秒以下
ディメンションフィルターのオペレータ
== 一致 %3D%3D filters=ga:city%3D%3DIrvine
アーバイン市のメトリックを集計
!= 不一致 !%3D filters=ga:city!%3DIrvine
アーバイン市以外のメトリックを集計
=@ 部分文字列を含む %3D@ filters=ga:city%3D@York
Yorkを含む市のメトリックを集計
!@ 部分文字列を含まない !@ filters=ga:city!@York
Yorkを含まない市のメトリックを集計
=~ 正規表現の一致 %3D~ filters=ga:city%3D~%5ENew.*
%5Eは ^文字のエンコードでNewで始まり任意の文字の0回以上の繰り返しに一致する市のメトリックを集計
!~ 正規表現の不一致 !~ filters=ga:city!~%5ENew.*
Newで始まる市以外のメトリックを集計
フィルタ式のルール
  • 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

ここに表示されているページデータが pagePath です
サイト名を除いたパーマリンクをエンコードしたものです

記事タイトルは、WordPress から get_permalink()関数を使って取得出来るので、あとはフィルターを使用すれば特定記事のアナリティクスデータを取得出来るのですが、ちょっと工夫が必要です

一番の問題は記事のタイトルが長過ぎることです
長めの日本語のタイトルがエンコードされると256文字を超える場合もあります (^_^;)

特定のページを絞り込むためには、本当はタイトル全文が等しいか判定できれば良いのですが、128文字の制限内で正規表現を使って個別ページを絞り込んであげなければなりません

例えば 同じようなタイトルの記事が複数ある場合(比較的同じ言い回しのタイトルを使いがちなので)
OXの使い方その1、OXの使い方その2 のように後半部分がちょっとだけ違う場合と、OOの使い方、XXの使い方のように前半部分がちょっとだけ違う場合が考えられます

その場合にタイトルの一部を用いた正規表現の検索では、ひとつの記事に絞り込めない可能性もあります
そこは、仕様上回避できないので、前半50文字程度 と 後半50文字程度に分けて、その間を正規表現のメタ文字 .* でつなげてフィルタリングします

filters に ga:pagePath=~(パーマリンク前半部).*(パーマリンク後半部)

メタ文字 .* は、改行を除く全ての文字の0回以上の繰り返しです

この辺の処理はプログラム内で簡単に処理できるので、これでほとんどの場合で1つの記事に特定することが出来るはずです (^^)

正規表現は、なれないとなかなか判り難いかも知れませんが、Query Explorer サイトでいろいろ試せるのでちょっと実行させてみます

pagePath2

どうやらうまく行ったみたいです (^^)

あとは、この処理をプログラムへ組み込めば個別記事のアナリティクスデータをいろいろ取れそうです


まとめ記事紹介

search star user home refresh tag chevron-left chevron-right exclamation-triangle calendar comment folder thumb-tack navicon angle-double-up angle-double-down angle-up angle-down quote-left googleplus facebook instagram twitter rss