2017.6.21

Google Analytics APIでページビュー数を取得する

Webサーバー側(Ruby)で「Google Analytics Reporting API」を使って、ページ毎のビュー数を取得する方法です。

独自に収集することも可能でしたが、せっかくAnalyticsを導入しているサイトだったので、APIを利用して取得してみることにしました。

目次

  • APIを利用するまでの流れ
  • Google API ConsoleでAPIの有効、認証情報の作成
  • Googleアナリティクスでユーザーの追加、ビューIDの確認
  • 「google-api-client」のインストール
  • ページ毎のビュー数を取得する
  • authorizationの「scope」に設定できる値
  • 「metric」と「dimension」について
  • 「date_range」に設定できる値
  • リクエストで指定できるオプション
  • APIの利用制限
  • 感想

APIを利用するまでの流れ

「Google Analytics Reporting API」を利用できる状態にするための大体の流れは、Google Analytics API を叩いてデータを取得するまでの流れ(Ruby) - Qiita に掲載されています。

やらなければいけないことをまとめると以下の通りです。

Google API Consoleにアクセスして以下の作業を行う。

  • プロジェクトの作成
  • Google Analytics Reporting APIの有効
  • 認証情報の作成
  • 作成された秘密鍵のダウンロード

Googleアナリティクスにアクセスして以下の作業を行う。

  • ユーザーの追加(秘密鍵生成時に作成されたメールアドレスを利用)
  • ビューIDの確認

以下は実際に作業した時の流れですが、上記の参考にした記事そのままだったので、必要なければ読み飛ばしてください。

Google API ConsoleでAPIの有効、認証情報の作成

プロジェクトはすでに作成済みとして、まずは「Google Analytics Reporting API」を有効にします。

よく利用されるAPIの一覧にはないのでAPIを検索して、検索されたAPIの中から「Google Analytics Reporting API」を選択します。

APIを有効にします。

有効にしただけでは利用できないので、続いて認証情報を作成します。

認証の種類を判別するため、必要な情報を入力します。

判別の結果サービスアカウントの作成を促されます。キーのタイプは他の使ってみた関連のブログや記事ではP12ファイルを作成していることが多かったのですが、推奨がJSONになっているので、とくに問題なければJSONでいいかと思います。

役割は「project > 閲覧者」を選択します。

「次へ」ボタンを押すと、作成された秘密鍵の保存を促されるので、適当な場所を選択してファイルをダウンロードします。

ダウンロードが完了すると、メッセージが表示されます。

メッセージにある通り、作成された秘密鍵は一度しかダウンロードできないようなので、大切に保存しましょう。

続いてGoogleアナリティクスでの設定に移ります。

Googleアナリティクスでユーザーの追加、ビューIDの確認

Googleアナリティクスでは、秘密鍵生成時に作成されたメールアドレスを利用してユーザーを追加します。(管理 > ビュー > ユーザー管理)

続いて、ビューIDを確認します。(管理 > ビュー > ビュー設定)

上記の設定を行ったら、あとはプログラムから利用するだけです。

「google-api-client」のインストール

RubyからGoogleのAPIを利用する場合、google-api-ruby-clientを使います。

インストール方法は以下の通り。


gem install google-api-client

インストールが完了するまで結構時間がかかりました。(5分くらい)

ページ毎のビュー数を取得する

「Google Analytics Reporting API」を利用して、ページ毎のビュー数を取得するコードは以下の通りです。

APIについては、アナリティクス Reporting API v4 を参照。


require 'google/apis/analyticsreporting_v4'

analytics = Google::Apis::AnalyticsreportingV4
client = analytics::AnalyticsReportingService.new

# 認証情報の設定
client.authorization = Google::Auth::ServiceAccountCredentials.make_creds(
    json_key_io: File.open('google-auth-cred.json'),
    scope: ['https://www.googleapis.com/auth/analytics.readonly']
)

# リクエストの作成
date_range = analytics::DateRange.new(start_date: '7DaysAgo', end_date: 'today')
metric = analytics::Metric.new(expression: 'ga:pageviews')
dimension = analytics::Dimension.new(name: 'ga:pagePath')
order_by = analytics::OrderBy.new(field_name: 'ga:pageviews', sort_order: 'DESCENDING')
request = analytics::GetReportsRequest.new(
    report_requests: [analytics::ReportRequest.new(
        view_id: '123456789', 
        metrics: [metric], 
        dimensions: [dimension], 
        order_bys: [order_by],
        date_ranges: [date_range]
    )]
)

# リクエストの実行
response = client.batch_get_reports(request)

# レスポンス
response.reports

上記のコードを実際に実行すると、以下のようなデータが取得できます。


[{
    "column_header": {
        "dimensions": ["ga:pagePath"],
        "metric_header": {
            "metric_header_entries": [{
                    "name": "ga:pageviews",
                    "type": "INTEGER"
                }]
        }
    },
    "data": {
        "minimums": [{"values": ["1"]}],
        "totals": [{"values": ["100"]}],
        "row_count": 3,
        "rows": [{
                "metrics": [{"values": ["70"]}],
                "dimensions": ["/example/001/"]
            }, {
                "metrics": [{"values": ["29"]}],
                "dimensions": ["/example/002/"]
            }, {
                "metrics": [{"values": ["1"]}],
                "dimensions": ["/example/003/"]
            }]
    }
}]

以下は、プログラムで気になった点の確認です。

authorizationの「scope」に設定できる値

上記のコードで「https://www.googleapis.com/auth/analytics.readonly」を設定しているスコープですが、他にどんな値があるのかと思ったら「Google Analytics Reporting API, v4」では2つのみでした。

  • https://www.googleapis.com/auth/analytics(View and manage your Google Analytics data)
  • https://www.googleapis.com/auth/analytics.readonly(View your Google Analytics data)

参照するだけなのでreadonlyでいいですね。

その他のAPIで設定できるスコープは OAuth 2.0 Scopes for Google APIs を参照。

「metric」と「dimension」について

metric も dimensionも聞き慣れない言葉だったので、最初は何を指定するものなのかさっぱりでした。簡単に説明すると、metric はどんな情報がほしいのか、dimension はどの単位でデータを分けるか、という感じです。

上記のコードでは、metric でページビュー数を、dimension でURLを指定しています。

ちなみに、metric、dimension に設定できる値は Dimensions & Metrics Explorer で確認できます。

「date_range」に設定できる値

date_rangeで対象の期間を指定します。

指定できる値としては、yyyy-mm-dd 形式(2017-06-01)の日付と、today や yesterday、NdaysAgo(Nは数値)といった値で、デフォルトは {start_date: '7daysAgo', end_date: 'yesterday'} になります。

以下は現在の日付から30日間分のデータを日付形式で指定する場合の例


date_range = analytics::DateRange.new(
    start_date: (Date.today - 30).strftime("%Y-%m-%d"), 
    end_date: Time.now.strftime("%Y-%m-%d")
)

リクエストで指定できるオプション

上記のコードでは、リクエスト時に metrics、dimensions、order_bys、date_ranges といったオプションしか利用していませんが、他にも指定できるものがあるので、詳しくは メソッド: reports.batchGet を確認してください。

APIの利用制限

Google Analytics Reporting API の主な利用制限は以下の通りです。

  • プロジェクトごとに1日50,000件のリクエスト
  • プロジェクトごとに100秒あたり2,000件のリクエスト
  • ユーザー1人につき、プロジェクトごとに100秒あたり100件のリクエスト

今回の利用では、サーバ側で1日に数回程度のリクエストしか行わないので、上限の心配はいりません。

制限についての詳細は API リクエストの制限と割り当て を参照。

感想

できることが沢山あるからなのか、パッと見で理解できるドキュメントが見当たりませんでした。このページを見ておけば大体の流れとできることが分かるサイトがほしいですね。

RubyでGoogleのAPIを利用する方法が分かったので、気が向いたら他のAPIにも手を出してみたいと思います。

Ruby】関連記事