legato(とsignet)とinfluxdb-rubyというgemを使って
Google Analyticsのデータをinfluxdbに入れてみます。
Legatoのクラスを生成
普通のRubyのクラスへLegato::Modelをextendして、
metricsとdimensionsを設定します。
class DailyPageView
extend Legato::Model
metrics :pageviews, :sessions
dimensions :date
filter :organic_searches, &lambda { matches(:medium, 'organic') }
end
metricsはpageviewsと設定すると
ga:pageviews
というパラメータに変換してくれます。
mcf(Multi-Channel Funnels)やrt(Real Time)の場合にも対応しています。
def self.to_ga_string(str, tracking_scope = "ga")
"#{$1}#{tracking_scope}:#{$2}" if str.to_s.camelize(:lower) =~ /^(-)?(.*)$/
end
次にこのクラスを使って、ページビュー数とセッション数を取得します。
取得
signetというgemで取得したtokenを
Legato::Userのクラスに渡して、profileの情報を取得します。
(ここは割愛します。後で書くかも)
その後、influxdbに入れます。
profile = oauth ## OAuth2の認証でtoken取得後にga_profiles = Legato::User.new(token).profiles.first
response = DailyPageView.results(profile, start_date: start_date, end_date: end_date, limit: 3000).organic_searches
response.each do |ga_value|
influxdb = InfluxDB::Client.new ENV['INFLUXDB_DATABASE'], ['INFLUXDB_USERNAME'], ['INFLUXDB_PASSWORD']
ga_data = []
ga_data.push(
series: 'pv_' + ga_value.date.to_date.strftime('%Y-%m'),
tags: { day: ga_value.date.to_date.strftime('%Y-%m-%d') },
values: ga_value.to_h
)
influxdb.write_points(ga_data)
end
seriesはなければ、作ってくれますが、
事前にENV['INFLUXDB_DATABASE']で設定しているデータベースは作っておきましょう。
上記のコードを実行したら、
influxdbに接続して、SQL(InfluxQL)を打ちます。
> select * from /pv_/
name: pv_2016-11
----------------
time date day pageviews sessions
1481111505000000000 20161127 2016-11-27 2 1
1481111505000000000 20161129 2016-11-29 2 1
1481111505000000000 20161128 2016-11-28 2 1
1481111505000000000 20161130 2016-11-30 5 2
name: pv_2016-12
----------------
time date day pageviews sessions
1481111505000000000 20161203 2016-12-03 6 2
1481111505000000000 20161202 2016-12-02 7 3
1481111505000000000 20161201 2016-12-01 5 3
今回はdate(value)とday(tag)があって、変ですが、
いちおう入っているようです。
終わりに
とりあえず、RubyのHashをvaluesに渡せば、
keyをカラムとしたテーブル(series)に
データ(value)を格納することができます。
この辺りが便利なところだと思います。