こんにちは、tahara です。
しばらくぼんやりしていたら Google API がすごい勢いで変っていて全然ついていけていませんでした。 Google APIs Console なんてものができていたんですね。
というわけで、今回は最近のやり方で Analytics の API をたたいてみたいと思います。
「Ruby で Google Analytics API」では Garb を使いましたが、今回は google-api-ruby-client を使います。
まずは Google APIs Console で新しいプロジェクを作り、Analytics API を ON にします。 引き続き Google APIs Console の API Access で Client ID for installed applications を作ります。 これで Client ID と Client secret が手に入ります。
Gemfile に gem 'google-api-client' を追加して bundle install を実行します。 OAuth のアクセスキーはコマンドラインを使うと簡単に取得できます。
bundle exec google-api oauth-2-login --scope='https://www.googleapis.com/auth/analytics.readonly' --client-id='Google APIs Console で取得した Client ID' --client-secret='Google APIs Console で取得した Client secret'
これを実行するとブラウザが起動していアクセス許可を求められます。 アクセスを許可すると次のような ~/.google-api.yaml というファイルにアクセスキー等が書き出されます。
--- mechanism: oauth_2 scope: https://www.googleapis.com/auth/analytics.readonly client_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx client_secret: xxxxxxxxxxxxxxxxxxxxxxxx access_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refresh_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
これで必要なものがそろったので API をたたきます。
# -*- coding: utf-8 -*- require 'google/api_client' module Actindi module Google class Analytics PROFILE_DEFAULT = 'ga:99999999' # プロファイル ID attr_accessor :profile def initialize @profile = PROFILE_DEFAULT @max_results = 10000 @client = ::Google::APIClient.new(:authorization => :oauth_2) @client.authorization.scope = 'https://www.googleapis.com/auth/analytics.readonly' # Google APIs Console で取得した Client ID @client.authorization.client_id = 'xxxxxxxxxxxxxxxxxxxxxxx' # Google APIs Console で取得した Client secret @client.authorization.client_secret = 'xxxxxxxxxxxxxxxxxxx' # ~/.google-api.yaml の access_token @client.authorization.access_token = 'xxxxxxxxxxxxxxxxxxxx' # ~/.google-api.yaml の refresh_token @client.authorization.refresh_token = 'xxxxxxxxxxxxxxxxxxx' @client.authorization.fetch_access_token! @analytics = @client.discovered_api('analytics', 'v3') end # x = Actindi::Google::Analytics.new.page_view('^/facilities/[0-9]+$', 1.month.ago, Date.today) def page_view(path, from, to, start_index = 1) result = @client.execute(:api_method => @analytics.data.ga.get, :parameters => { 'ids' => @profile, 'start-date' => from.to_date.strftime('%Y-%m-%d'), 'end-date' => to.to_date.strftime('%Y-%m-%d'), 'metrics' => 'ga:pageviews', 'dimensions' => 'ga:pagePath', 'filters' => "ga:pagePath=~#{path}", 'sort' => '-ga:pageviews', 'start-index' => start_index, 'max-results' => @max_results }) if result.status != 200 raise result.response.body.to_s end hash = result.data.rows.inject(Hash.new(0)) do |acc, x| x[0] =~ /([0-9]+)/ acc[$1.to_i] = x[1].to_i acc end if result.data.rows.size >= @max_results hash.merge!(page_view(path, from, to, start_index + @max_results)) end hash end end end end
いこーよ の過去1か月間のスポット詳細のアクセス数を取得します。
x = Actindi::Google::Analytics.new.page_view('^/facilities/[0-9]+$', 1.month.ago, Date.today)
@client.execute に渡す parameters にいては Google Analytics Query Explorer 2 を使って確認するといいと思います。
最後に、弊社ではシステムエンジニア、プログラマ、インフラエンジニアなどを募集しています。 おきがるにお問い合わせください。