読者です 読者をやめる 読者になる 読者になる

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

サイトのアクセスランキングを作る方法はいろいろありますが、自前で HTTPサーバのログから計算するのは大変です。Google AnalyticsAPI を使うとアクセス数が
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 集計には最終的に値が落ち着くまでにタイムラグがあるので、集計タイミングはそれを見極める必要があります。