RailsでGoogle Analytics Reporting APIでレポートデータ取得する方法をまとめました。レポートデータ取得処理を独自クラス化し、JSON形式のレスポンスで返すところまでを紹介しています。
目次
Google Analytics Reporting APIの設定準備
Google Analytics Reporting APIの設定は以下の記事を参考にしました。
- プロジェクトの作成
- サービスアカウントの作成
- 秘密鍵のJSONファイルを生成 ← あとで使います
- Googleアナリティクスにユーザ追加
- ビューIDの確認 ← あとで使います
参考:Google Analytics API を叩いてデータを取得するまでの流れ(Ruby)
RailsでGoogleアナリティクスレポートデータ取得処理をクラス化
Googleアナリティクスレポートデータ取得処理を独自クラス化し、コントローラで使えるようにします。
先程生成した秘密鍵のJSONファイルは「analytics_auth.json」として配置し、authメソッドでGoogleアナリティクスAPIに認証を行ってからレポートデータを取得しにいきます。
report_pv_count_by_dateメソッドで、取得開始日と取得終了日を引数(デフォルトは当日)で指定してその期間のレポートデータを取得できるようにします。
・lib/analytics.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | require 'google/apis/analyticsreporting_v4' class Analytics # レポート対象を指定してオブジェクトを生成 # @param [String] base_url レポート対象サイトのURL # @param [String] view_id ビューID def initialize(base_url, view_id) @base_url = base_url @view_id = view_id @analytics = Google::Apis::AnalyticsreportingV4 auth end # 指定した期間のページごとのPVを集計 # @param [String] date 日付を表す文字列 # @return [Hash] 累計PV及びページごとのPV def report_pv_count_by_date(start_date = 'today', end_date = 'today') date_range = @analytics::DateRange.new(start_date: start_date, end_date: end_date) metric = @analytics::Metric.new(expression: 'ga:users', alias: 'users') dimension = @analytics::Dimension.new(name: 'ga:pagePath') order_by = @analytics::OrderBy.new(field_name: 'ga:users', sort_order: 'DESCENDING') request = @analytics::GetReportsRequest.new( report_requests: [@analytics::ReportRequest.new( view_id: @view_id, metrics: [metric], date_ranges: [date_range], dimensions: [dimension], order_bys: [order_by], )] ) response = @client.batch_get_reports(request) data = response.reports.first.data return { total: data.totals.first.values.first, pages: data.rows.map do |row| { url: @base_url + row.dimensions.first, dir: row.dimensions.first, views: row.metrics.first.values.first } end } end private # GoogleアナリティクスAPIに認証 # 同ディレクトリにanalytics_auth.jsonを配置 def auth scope = ['https://www.googleapis.com/auth/analytics.readonly'] @client = @analytics::AnalyticsReportingService.new @client.authorization = Google::Auth::ServiceAccountCredentials.make_creds( json_key_io: File.open('analytics_auth.json'), scope: scope ) end end |
独自クラスを作成したら、呼び出せるようにapplication.rbに以下を追記します。
・config/application.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | require_relative 'boot' require 'rails/all' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups) module AppName class Application < Rails::Application ... # 独自クラスパス指定 config.autoload_paths += %W(#{config.root}/lib) ←追加 ... end end |
uninitialized constantエラーで定義したクラスを読むことができない場合は、config/initializersディレクトリ配下にrequirements.rbファイルを作成し、以下を追記してください。
・config/initializers/requirements.rb
1 | require Rails.root.join('lib/analytics.rb') |
クラス化したGoogleアナリティクスレポートデータ取得メソッド呼び出し
実際にコントローラで呼び出してみます。初期化のBASE_URLとVIEW_IDは環境変数として.envに設定し呼び出して使うようにします。
フロントからパラメータ(取得開始日・取得終了日)をPOSTし、それらを引数にして実行しています。レスポンスはJSON形式で返すようにしています。
あとはroutes.rbにルーティングを設定して完了です。
・app/controllers/api/analytics_controller.rb
1 2 3 4 5 6 7 8 9 | class Api::AnalyticsController < Api::ApplicationController def report analytics = ::Analytics.new(ENV['BASE_URL'], ENV['VIEW_ID']) render json: analytics.report_pv_count_by_date(params[:start_date], params[:end_date]) end end |
以上、RailsでGoogle Analytics Reporting APIでレポートデータ取得する方法でした。