RubyのバッチでGoogleAnalyticsのデータを取得する(OAuth2利用)
Garbが使えなくなった・・・
もともとはGarbというgemを使ってアクセス数を取得するバッチを作っていたのですが、急にGoogleにログインができなくなってしまいました。。
いろいろと見てみると、Google APIがOAuth2以外の認証を受け付けなくなってしまった模様。
GarbでOAuth2を使うためにいろいろ試してみたのですがうまくいかず、Google謹製のgemに乗り換えました。
乗り換えたgemはこちら
google/google-api-ruby-client · GitHub
Google Developers Consoleで鍵ファイルを取得
まず準備として、Google Developers Consoleにアクセス。 https://console.developers.google.com
プロジェクトを作成していない場合は作成する。
プロジェクトを開いたら、
APIと認証 > 認証情報
を開き、新しいクライアントIDを作成する。
アプリケーションの種類は、「サービス アカウント」を選択する。
IDを作成したら、「新しい P12 キーを生成」をクリックして、鍵ファイルをダウンロードする。
作成したクライアントのメールアドレスに権限を設定する
Analyticsのデータが見れるように、権限を設定します。
自分はこれを忘れてだいぶハマりました。
Google Analyticsを開き、「アナリティクス設定」を選択します。
アカウント→プロパティ→ビュー の順に、取得したいサイトの項目を選択していきます。
ビューの下の「ユーザー管理」をクリックし、Google Developers ConsoleのクライアントIDの下に表示されているメールアドレスを追加してください。
権限は、自分は編集までにしましたが、もっと低くても大丈夫かもしれません。
この時、ビュー設定の「ビューID」をコピっておきます。
後で使用します。
Gemfile設定
# Gemfile gem 'google-api-client' gem 'signet'
を記入して、 bundle install
する。
OAuth2認証
client = Google::APIClient.new(:application_name => '') # 鍵ファイルの場所を指定 key = Google::APIClient::PKCS12.load_key(File.join(Rails.root, 'certificates', 'analytics.p12'), 'notasecret') client.authorization = Signet::OAuth2::Client.new( :token_credential_uri => 'https://accounts.google.com/o/oauth2/token', :audience => 'https://accounts.google.com/o/oauth2/token', :scope => 'https://www.googleapis.com/auth/analytics', :issuer => 'example@example.com', # Google Developers Consoleに表示されているメールアドレスを入力 :signing_key => key, ) client.authorization.fetch_access_token!
今回は鍵ファイルを、 RAILS_ROOT/certificates/analytics.p12
に配置しています。
鍵ファイルの場所は各自書き換えてください。
client.authorizationのパラメータ issuer
には、先程権限を追加したメールアドレスを入力してください。
Analytcsからデータを取得する
start_date = Date.today - 7 end_date = Date.today - 1 api_method = client.discovered_api('analytics','v3').data.ga.get results = client.execute(:api_method => api_method, :parameters => { 'ids' => 'ga:999999', # ビューIDを設定する 'start-date' => start_date.to_s, 'end-date' => end_date.to_s, 'dimensions' => 'ga:pagePath', 'metrics' => 'ga:pageviews' }).data.rows
パラメータ ids
には、権限追加時にコピーしておいたビューIDを入力します。
これを実行すると、
results => [["/", 10], ["page1.html", "5"], ["page2.html"], "8"]
のような形式でページビューが取得できます。
全体のソース
require 'google/api_client' require 'google/api_client/client_secrets' require 'google/api_client/auth/installed_app' module Google class Analytics def self.import start_date = Date.today - 7 end_date = Date.today - 1 # OAuth2認証 client = Google::APIClient.new(:application_name => '') key = Google::APIClient::PKCS12.load_key(File.join(Rails.root, 'certificates', 'analytics.p12'), 'notasecret') client.authorization = Signet::OAuth2::Client.new( :token_credential_uri => 'https://accounts.google.com/o/oauth2/token', :audience => 'https://accounts.google.com/o/oauth2/token', :scope => 'https://www.googleapis.com/auth/analytics', :issuer => 'example@example.com', :signing_key => key, ) client.authorization.fetch_access_token! # Analyticsからデータ取得 api_method = client.discovered_api('analytics','v3').data.ga.get results = client.execute(:api_method => api_method, :parameters => { 'ids' => 'ga:999999', 'start-date' => start_date.to_s, 'end-date' => end_date.to_s, 'dimensions' => 'ga:pagePath', 'metrics' => 'ga:pageviews' }).data.rows # resultsからデータを取得する処理 # ・ # ・ # ・ end end end