Ruby で Google Analytics から直近1時間のページビューランキングを取得する方法

September 5, 2012

サイトのアクセスランキングを作る方法はいろいろありますが、自前で HTTPサーバのログから計算するのは大変です。Google Analytics の API を使うとアクセス数が
Ruby には Google Analytics API を操作できる Garb という便利なラッパーライブラリがあります。今回はこれを使います。

Garbのインストール

gemで入れます。プロジェクトは GitHub で管理されています。 https://github.com/vigetlabs/garb

# gem install garb
Fetching: crack-0.3.1.gem (100%)
Fetching: i18n-0.6.1.gem (100%)
Fetching: activesupport-3.2.8.gem (100%)
Fetching: garb-0.9.1.gem (100%)
Successfully installed crack-0.3.1
Successfully installed i18n-0.6.1
Successfully installed activesupport-3.2.8
Successfully installed garb-0.9.1
4 gems installed

スクリプト本体

それほど長くないので、まずソースコードを貼っておきます。

#!/usr/bin/ruby1.9.1
# coding: utf-8
require ‘rubygems’
require ‘garb’
require ‘uri’
Garb::Session.login(‘<アカウント>’, ‘<パスワード>’)
profile = Garb::Management::Profile.all.detect { |p|
p.web_property_id = ‘<サイトプロパティID>’
p.id = ‘<アカウントID>’
}
class PageTitle
extend Garb::Model
metrics :pageviews
dimensions :hour, :page_path, :page_title
end
today = Time.now - 3600;
start_date = today
end_date = today
hour = today.hour
if hour < 10
hour = “0” + hour.to_s
else
hour = hour.to_s
end
cond = {
:limit => 20,
:sort => :pageviews.desc,
:start_date => start_date,
:end_date => end_date,
:filters => { :hour.eql => hour }
}
rs = PageTitle.results(profile, cond)
rs.each do |r|
puts r.page_path # ページパス
puts r.page_title # ページタイトル
puts r.pageviews # ページビュー
end

ログインとプロファイルの特定

単純にGoogleアカウントでログインするだけなら、Garb::Session.login で済みます。OAuthを使って認証させることもできます。さらに detect メソッドで集計したい、アナリティクスアカウントとWebサイトを特定した profile を取得します。

モデルへのアクセス

集計に使用するメトリックスとディメンションを Garb::Model を継承したオブジェクトに定義します。さらにそのオブジェクトの results メソッドに profile と集計条件のハッシュマップを渡せば結果がリストで返ります。
メトリックスとディメンションに設定できる項目は、Dimensions & Metrics Reference - Google アナリティクス — Google Developers でわかります。

集計条件

上記の条件 cond は、開始と終了日を今日に一時間前の時間帯(hour 00〜23)から、ページビューの多い順に 20 件を取得するものになります。開始と終了は日付なので時間帯を上手く使うことで直近1時間を実現しています。

Google Analytics サイトで上記を表示させるのは、難しい設定ですが API を使うと、容易に取得および扱うことができます。なお Analytics 集計には最終的に値が落ち着くまでにタイムラグがあるので、集計タイミングはそれを見極める必要があります。

Ruby Analytics

tilfin freelance software engineer