Google Analytics のAPIとRubyでのサンプル

集計結果を取得できるAPIが提供されている。

APIアクセスのための、PHP, Ruby, JavaなどのライブラリやサンプルコードをGoogleが提供している。

https://developers.google.com/analytics/devguides/reporting/core/v3/gdataLibraries

APIの認証は、OAuth2.0。

期間、dimensions, metrics を指定して集計結果を取得できる。dimensionsとして、日付、URL、参照元、ブラウザの種類など、 metricsとして、訪問数、PVなどが使える。

https://developers.google.com/analytics/devguides/reporting/core/dimsmets

Google APIs Explorer

https://developers.google.com/apis-explorer/#p/

ブラウザから簡単にGoogleの各種APIを試すことができる。

APIの制限

APIにアクセスする準備

Google API console
https://developers.google.com/console/

Google API console のページで “Create project …” ボタンを押して、プロジェクトを作成して、いろいろ設定する。

Rubyでのサンプルコード

phase1.rb

# -*- coding: utf-8 -*-
require 'google/api_client'

client = Google::APIClient.new

# API console
# https://developers.google.com/console/
# で取得できる Client ID, Client secret をここに書く
# 
# このRubyのライブラリでは、
# Web Application として登録が必要みたい

# Client ID
client.authorization.client_id = '999999999999-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com'

# Client secret
client.authorization.client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxx'

# 自分のアプリ側でコールバックを受けるURLをここに書く。
# 実際にコールバックを受けるときにはこのURLの後ろに
# ?code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# というようなパラメータが渡される。
client.authorization.redirect_uri = 'http://myapp.example.com/callback'

# OAuthでGoogleアカウントのどんな権限を必要とするのかを以下に書く。
# 
# Analyticsのレポート取得で必要な権限の説明は以下に書いてある。
# https://developers.google.com/analytics/devguides/reporting/core/v3/gdataAuthorization#OAuth2Scope
# 
client.authorization.scope = 'https://www.googleapis.com/auth/analytics.readonly'

redirect_uri = client.authorization.authorization_uri
puts redirect_uri
# 
# ブラウザでGoogleアカウントにログインしておいて、
# ここで表示されたURLにブラウザアクセスすると、
# 認可の画面が表示されるので、"アクセスを許可" のボタンを押す。
# 
# すると、client.authorization.redirect_uri に設定したURLにリダイレクトされるが、
# そのときに code というパラメータを渡されるので、
# その値を次の phase2.rb に書く。

phase2.rb

# -*- coding: utf-8 -*-
require 'google/api_client'

client = Google::APIClient.new

client.authorization.client_id = '999999999999-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com'
client.authorization.client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxx'
client.authorization.redirect_uri = 'http://myapp.example.com/callback'
client.authorization.scope = 'https://www.googleapis.com/auth/analytics.readonly'

# phase1.rb で取得したcodeをここに書く
client.authorization.code = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

p client.authorization.fetch_access_token!
# ここでaccess_tokenなどがHashで表示されるので、
# それを次の phase3.rb に書く

phase3.rb

# -*- coding: utf-8 -*-
require 'google/api_client'

client = Google::APIClient.new

# phase2.rb で取得したHashをここに書く
client.authorization.update_token!({"access_token"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "token_type"=>"Bearer", "expires_in"=>3600, "refresh_token"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"})

analytics = client.discovered_api('analytics', 'v3')

result = client.execute(
  :api_method => analytics.management.profiles.list,
  :parameters => {'accountId' => '~all', 'webPropertyId' => '~all'}
)
p result.data
# ここでいろいろ表示されるが、idの値(8桁の数字の)を拾って、
# それを次の phase4.rb に書く

phase4.rb

# -*- coding: utf-8 -*-
require 'google/api_client'

client = Google::APIClient.new

# phase2.rb で取得したHashをここに書く
client.authorization.update_token!({"access_token"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "token_type"=>"Bearer", "expires_in"=>3600, "refresh_token"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"})

analytics = client.discovered_api('analytics', 'v3')

# idsのところには、phase3.rb で取得した8桁の数字のidに 'ga:' を付けて書く
result = client.execute(
  :api_method => analytics.data.ga.get,
  :parameters => {'ids' => 'ga:99999999', # Unique table ID
                                          # for retrieving Analytics data.
                                          # Table ID is of the form ga:XXXX,
                                          # where XXXX is the Analytics profile ID.
                  'start-date' => '2013-06-01',
                  'end-date' => '2013-06-10',
                  'dimensions' => 'ga:date,ga:pagePath',
                  'metrics' => 'ga:visitors,ga:pageviews'})
p result.data.rows
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。