Google Analytics の Real Time Reporting API を Ruby から使う

## 事前準備

### Google Analytics の Real Time Reporting API の利用申請をする

Real Time Reporting API のページに行くと、以下のような申請フォームへのリンクが現れると思います。

https://developers.google.com/analytics/devguides/reporting/realtime/v3/?hl=ja

![Real_Time_Data__get_-_Google_Analytics_—_Google_Developers 3.png](https://qiita-image-store.s3.amazonaws.com/0/904/6e8d9b4f-83a6-8b80-9a62-5d16b5b9d25e.png)

申請してからどれぐらいで使えるようになるのかはちょっと分からず。とりあえず申請だけしておいて、翌日とかに使ってみるといいかも。

Developers Console から __Analytics API__ の利用を許可しておきます。

![Google_Developers_Console 2.png](https://qiita-image-store.s3.amazonaws.com/0/904/4b384b93-1b04-442c-aeb2-96b5bc018ba6.png)

## APIs Explorer で試してみる

### 計測したいビューIDをメモする

![Google_Analytics.png](https://qiita-image-store.s3.amazonaws.com/0/904/4358a27e-99c5-3db5-10fa-f6a7e12ffc1c.png)

### APIs Explorer で試す

https://developers.google.com/analytics/devguides/reporting/realtime/v3/reference/data/realtime/get?hl=ja#examples

![Real_Time_Data__get_-_Google_Analytics_—_Google_Developers.png](https://qiita-image-store.s3.amazonaws.com/0/904/e825ccbb-b1b0-84f2-8c88-52b92626ffa3.png)

とりあえず metrics として `activeUsers` を入れて、現在のリアルタイムのアクティブユーザー数を取得してみます。

OAuth を on にすると以下のフォームが出ます。デフォルトでもいいですし、readonly だけにしてもいいです。

![Real_Time_Data__get_-_Google_Analytics_—_Google_Developers 2.png](https://qiita-image-store.s3.amazonaws.com/0/904/61cbef23-2d4a-91d3-1991-4b1a02b01db0.png)

最後 __Execute__ で実行してみてください。

結果の中に以下のような JSON が含まれていれば成功です。

```json
"totalsForAllResults": {
  "rt:activeUsers": "15" // これがアクティブユーザー数
}
```

## Ruby で取得する

### google-api-ruby-client gem を入れる

https://github.com/google/google-api-ruby-client

### OAuth 周りのサンプル

Github の README もいいのですが、Google Developers の説明も参考になりました。

- [OAuth 2.0 - Google APIs Client Library for Ruby](https://developers.google.com/api-client-library/ruby/guide/aaa_oauth?hl=ja)

今回は `Installed application` として実施します。

### client_secret.json を取得する

![Google_Developers_Console.png](https://qiita-image-store.s3.amazonaws.com/0/904/2d9a2fc5-7c8f-4fd2-6a5b-577d912bb65b.png)

### OAuth 周りのコード

`client_secret.json` は作成する Ruby の実行ファイルと同じディレクトリに `client_secrets.json` にリネームしてから保存しておいてください。

```rb
require 'google/api_client'
require 'google/api_client/client_secrets'
require 'google/api_client/auth/installed_app'
require 'google/api_client/auth/file_storage'

CREDENTIAL_STORE_FILE = "#{$0}-oauth2.json"

client = Google::APIClient.new(
  :application_name => 'Example Ruby application',
  :application_version => '1.0.0'
)

file_storage = Google::APIClient::FileStorage.new(CREDENTIAL_STORE_FILE)

if file_storage.authorization.nil?
  # client_secrets.json を読み込む
  client_secrets = Google::APIClient::ClientSecrets.load

  flow = Google::APIClient::InstalledAppFlow.new(
    client_id: client_secrets.client_id,
    client_secret: client_secrets.client_secret,
    scope: [
      'https://www.googleapis.com/auth/analytics.readonly'
    ]
  )

  client.authorization = flow.authorize(file_storage)
else
  client.authorization = file_storage.authorization
end
```

最初の一回はブラウザが立ち上がり許可を求められますが、2 度目の実行からは認証情報をファイルに保存されているものから復元するのでブラウザは立ち上がりません。

### リアルタイムなアクティブユーザー数を取得する

先ほど APIs Explorer で試した通りになります。

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

count = client.execute(api_method: analytics.data.realtime.get, parameters: {
  ids: "ga:xxxxx",
  dimensions: 'rt:medium',
  metrics: 'rt:activeUsers'
})

active_users_count = count.data.totals_for_all_results['rt:activeUsers']
```

例えば ページ毎のユーザー数を取得したければ以下のようになります。

```rb
count = client.execute(api_method: analytics.data.realtime.get, parameters: {
  ids: "ga:xxxxx",
  dimensions: 'rt:medium,rt:pagePath',
  metrics: 'rt:activeUsers'
})

count.data.rows.each do |row|
  puts "path:#{row[1]}, count:#{row[2]}"
end
```

dimensions と metrics のパターンについては以下を見ると一覧できます。

- [Dimensions & Metrics Reference - Google Analytics](https://developers.google.com/analytics/devguides/reporting/realtime/dimsmets/?hl=ja)