1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Analyticsのデータとたわむれる 1

Posted at

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)の場合にも対応しています。

lib/legato.rb
  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)を格納することができます。
この辺りが便利なところだと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?