Legato
Google Analytics の API を扱うときに便利な gem です。
ごくごく基本的な使い方
Legato の詳しい使い方は 公式のREADME や 公式のWiki に詳しく載っていますが、やはりコードを実際に見て理解するのが一番良いと思いますので、コードベースで順を追って書き連ねていきます。
1. Google Analytics の APIキー を取得する
まず、Google Analytics 用 の APIキー(トークン)を取得します。ここでは詳細な説明は避けますので、別途、入手してください。取得したアカウントを Google Analytics のユーザとして登録することも忘れないようにしましょう。
2. APIキー を用いてアクセスするユーザのオブジェクトを作成する
「1.」で APIキー が取得できたならば、Google Anaytics にアクセスするユーザのオブジェクトを作成します。
まず、必要な gem を入れます。Legato 本体はもちろんですが、認証のために OAuth2 と Signet も入れます。
$ gem install legato $ gem install oauth2 $ gem install signet
インストールできたら、以下のようなコードを書いて「ユーザのオブジェクト」を取得します。大半は「おまじない」です*1。ga_user
が「ユーザのオブジェクト」になります。
google_analytics_api_key = '-----BEGIN PRIVATE KEY-----\nabCDefgHIjkLMN...==\n-----END PRIVATE KEY-----\n' private_key = google_analytics_api_key signing_key = OpenSSL::PKey::RSA.new(private_key) scope = 'https://www.googleapis.com/auth/analytics.readonly' auth_client = Signet::OAuth2::Client.new( token_credential_uri: 'https://accounts.google.com/o/oauth2/token', audience: 'https://accounts.google.com/o/oauth2/token', scope: scope, issuer: 'google-analytics-api-user@foo.bar.gserviceaccount.com', signing_key: signing_key, sub: 'google-analytics-api-user@foo.bar.gserviceaccount.com', ) access_token = auth_client.fetch_access_token! oauth_client = OAuth2::Client.new('', '', { authorize_url: 'https://accounts.google.com/o/oauth2/auth', token_url: 'https://accounts.google.com/o/oauth2/token', } ) token = OAuth2::AccessToken.new( oauth_client, access_token['access_token'], expires_in: access_token['expires_in'], ) ga_user = Legato::User.new(token) ga_user.access_token.expired? ga_user
この「ユーザのオブジェクト」さえ取得できれば、後は簡単です。
3. 「プロファイル(ビュー)」を選ぶ
データを取得するために、まずは対象の「プロファイル(=ビュー)」を選択しましょう*2。いくつか方法はあるのですが(別記事に書きます)、「ビューID」を使用する方法を紹介します。
ga_user.profiles.each do |profile| @target_profile = profile if profile.id == '12345678' end
上記の記述で「ビューID」が「12345678」のビューのオブジェクトが@target_profile
に格納されました。ここでの注意点は以下のとおりです。
profiles
メソッドを用いるとプロファイルの「かたまり」*3が取得されるので、個別に取得するために each で回す- 「ビューID」は 文字列なのでクォートする*4
- 「ビュー」を取得するために、「プロパティ(例: UA-123456-7)」は原則として関係がない
4-1. 検索条件を組み立てて検索結果を取得する
いよいよ検索条件を組み立てます。ここは GA を扱った人ならば容易に理解できると思います。記事の最後の「参考」に記してある公式のドキュメントもぜひ参考にしてください。
さて、具体的なコードは以下のとおりです。分かりやすくするためにベタ書き一直線で書いています。「日付ごと」の「検索キーワード」一覧につき、「セッション数」で集計したデータを取得するコードです*5。
class SearchByLegato extend Legato::Model dimensions(:date, :searchKeyword) metrics(:searchSessions) end start_date = '5daysAgo' end_date = '2daysAgo' limit = 10 sort = '-searchSessions' sampling_level = 'HIGHER_PRECISION' query = @target_profile.search_by_legato # Modelを使用する search_results = query.results(start_date: start_date, end_date: end_date, limit: limit, sort: sort, sampling_level: sampling_level)
ここでの最大のポイントはquery = @target_profile.search_by_legato
の箇所です。search_by_legato
って何ぞやと思うかもしれませんが、これは Legato の Model の定義に沿ったメソッド名です。直前のクラス定義でSearchByLegato
という、Legato::Model
をextend
したクラスを生成しており、これによりsearch_by_legato
というメソッドが自動的に生成されます。「プロファイルのオブジェクト」に対してこのメソッドを実行することで「クエリのオブジェクト」が生成されます。
「クエリのオブジェクト」に対してresults
メソッドを実行すれば、 search_results
に検索の結果が格納されます!
4-2. 各検索条件の説明
「4-1.」にて設定している、各検索項目の説明は以下のとおりです。より詳しくは記事の最後の「参考」から公式ドキュメントをたどってみてください。
dimensions
とmetrics
で取得する値の具体的な項目を決めますdimensions
はディメンション
を指しますmetrics
は日本語で指標(グループ)
と呼ばれている項目です
dimensions
とmetrics
以外の項目で取得する値の条件を付与します
5. 結果を表示する
それでは結果を表示しましょう。search_results
は結果の「かたまり」のオブジェクトなので、each で回してあげます。以下のコードをご覧ください。
search_results.each do |result| puts "検索日は #{result.date} です。検索キーワードは #{result.searchKeyword} です。検索回数(セッション)は #{result.searchSessions} 回です" end
search_results
を単体にバラして(単体にバラした結果をresult
としています)、result に格納されているそれぞれの検索結果の値をドットを用いて指定すればよいです*8。これで値を具体的に取得できました。ここまでできたならば、値をデータベースやCSVファイルなどの外部に出すことは容易でしょう。
参考
以下のページを参考にさせていただきました。感謝!
Google Analytics 公式
- UA Dimensions & Metrics Explorer
- UA Query Explorer
- Core Reporting API - Reference Guide | Analytics Core Reporting API | Google Developers