約束の地

キャロの想い出

Legato でフィルターをかける方法

Legato

Google Analytics の API を扱うときに便利な gem です。

検索結果に対して「フィルター」をかける

例えば、昨日のサイトのページビュー数を取得したとします。その中から「ページビュー数が1000以上のもの」を抽出したい場合には「フィルター」をかける必要があります。

フィルターの書き方

フィルターの書き方は次のとおりです。filterというフィルターの生成メソッドに対し、「第一引数にフィルターのメソッド名(自由につけてよい)」、「第二引数にそのフィルターの動作」を書きます。公式のWikiに詳しい説明が載っています。

filter :my_filter_name, &lambda {gte(:searchSessions, 1000)}

上記のように書くことで、「my_filter_name」というフィルター(のメソッド)が定義されました。このフィルターの内容は、「『searchSessions』が1000以上」の結果を抽出するということになります。

フィルターを書く場所

フィルターの定義は前述のように書くことができます。問題は「場所」です。

答えは、「Legato::Modelextendしたクラス内」に書きます。簡単な例ですが、以下のようになります。

class MyLegatoClient
  extend Legato::Model


  dimensions(:date, :searchKeyword)
  metrics(:searchSessions)
  filter :my_filter_name, &lambda {gte(:searchSessions, 1000)}
end

これでmy_filter_nameというフィルター(のメソッド)が定義されました。

フィルターを適用する

あとはフィルターを適用するだけです。適用する場所は、「クエリのresultsメソッドを用いて検索結果を取得する場所」です。resultsメソッドの後ろにチェーンメソッドとしてつなげていきます。メソッドを複数つなげればフィルタを重ねて書けることができます。以下、例です。

search_results = query.results(start_date: start_date, end_date: end_date, limit: limit, sort: sort, sampling_level: sampling_level).my_filter_name

文の最後に.my_filter_nameをチェーンでつなげてフィルタをかけることができました。なお、詳しくは公式のWikiに掲載されています。

より複雑なフィルタリング

公式のドキュメントにあるように、フィルタの条件として各種 NOT句 が選べますので、それらを定義して組み合わせていけば(フィルタを重ねてかけていけば)、希望通りの検索結果の絞り込みができると思います。

Powered by はてなブログ