tpitale/legato
legato - Google Analytics Reporting API Client for Ruby
https://github.com/tpitale/legato
Google Analytics使っていますか?Google Analyticsを使っているWebサービス、サイトは非常に多いと思います。
怠惰を好むであろうエンジニアのみなさんは毎回どうやってGAからデータを取得していますか?
ブラウザ上のボタンをポチポチしてますか、GoogleAppScriptで賢く取得していますか?
GoogleAnalyticsのデータがRubyで取れて、gitで管理して出来ると嬉しいですね
そこで今回はGoogle Analyticsからデータを簡単に取得出来るgem「legato」を使ったデータ取得手順を説明します。
- Google App Scriptはスプレッドシートに紐づくからコピペの嵐になる
- githubで管理すれば他のエンジニアにもアクセスしやすい
- アプリケーションの機能として使える(ex. 定期的に実行してアプリケーションのDBにアクセス数を記録すれば簡単にランキングが作れる。)
- いちいちブラウザでボタンをポチポチしたくないエンジニアが嬉しくなる
- Rubyになれていればデータの加工が容易
legatoはGoogle Analyticsに接続するのですがその際にはOauthTokenを取得する必要があります。その後GAのmetricsとdimensionsを指定してデータを取得することになります。
Google AnalyticsのOauthTokenを生成するために以下のリンク(ステップ1まで)を参考に公開鍵と秘密鍵を生成してメモしておきましょう。
残念ながらRuby クイックスタートなるものは存在しません。
先ほど得た、公開鍵と秘密鍵を使って以下のコードを実行しましょう。Googleアカウントと連携するためのURLが出力されます。
ブラウザでGoogleアカウントと連携すると` localhoat?code=xxxxxxx`といった形式のURLにリダイレクトされるのでパラメータのcode以下をメモしておきましょう。
取得したcodeをauth_codeとして以下のコードを実行します。
上のコードからは以下のようなデータを取得することが出来ます。データの値がmetrics、軸がdimensionで指定できます。今回はdate別のpageviewを出していることになります。
=> [#<OpenStruct date="20160723", pageviews="741">,
#<OpenStruct date="20160724", pageviews="617">,
#<OpenStruct date="20160725", pageviews="595">,
#<OpenStruct date="20160726", pageviews="971">,
#<OpenStruct date="20160727", pageviews="512">,
#<OpenStruct date="20160728", pageviews="123">,
#<OpenStruct date="20160729", pageviews="366">,
#<OpenStruct date="20160730", pageviews="200">,
#<OpenStruct date="20160731", pageviews="415">,
#<OpenStruct date="20160801", pageviews="327">,
#<OpenStruct date="20160802", pageviews="721">,
#<OpenStruct date="20160803", pageviews="182">,
#<OpenStruct date="20160804", pageviews="125">,
#<OpenStruct date="20160805", pageviews="777">,
#<OpenStruct date="20160806", pageviews="863">,
#<OpenStruct date="20160807", pageviews="305">,
#<OpenStruct date="20160808", pageviews="146">,
#<OpenStruct date="20160809", pageviews="156">,
#<OpenStruct date="20160810", pageviews="150">,
#<OpenStruct date="20160811", pageviews="774">,
#<OpenStruct date="20160812", pageviews="110">,
#<OpenStruct date="20160813", pageviews="612">,
#<OpenStruct date="20160814", pageviews="536">,
#<OpenStruct date="20160815", pageviews="233">,
#<OpenStruct date="20160816", pageviews="234">,
#<OpenStruct date="20160817", pageviews="234">,
#<OpenStruct date="20160818", pageviews="456">,
#<OpenStruct date="20160819", pageviews="234">,
#<OpenStruct date="20160820", pageviews="322">,
#<OpenStruct date="20160821", pageviews="567">,
#<OpenStruct date="20160822", pageviews="234">]
アクセストークンの有効期限を過ぎたあとはauth_codeの取得からやり直すなり、アクセストークンと同時に取れるrefresh_tokenを使ってアクセストークンの再取得を行ってください。
上記の例に示した様にLegatoではデータを取得するためのクラスを作る際に、Legato::Modelをextendして、metrics, dimensionでデータの形式を指定する必要があります。
例えば以下のコードはデバイス毎の離脱率を取得するクラスになります。この様にmetrics, dimensionsを設定することで簡単に取得したいデータを選択できるようになります。
MetricsはUU(ユニークユーザー)、BounceRate(離脱率)、dimensionはdeviceCategory, LandingPageあたりはよく使うと思います。
詳しくはドキュメントを見るといいと思います
Rubyで書く前に以下のQueryExplorerで確認することができるので、スムーズにデータを取得できると思います。
自分はQueryExplorerとpryを使いながらデータを取れるか試すことが多いです。
認証周りが大変な印象を持ったかもしれませんが、一度データを取れるようになってしまえば後は楽です。OAuth2の認証の流れを抑えておくと認証の流れで躓くことはないでしょう。
また、一旦作ってしまえば継続的にデータを取れるのでRe:dashやDOMO, tableauなどのツールへ流し込むことも簡単になると思います。
簡単なサンプルを書いたので、楽をしたい人はどんどん工夫をしていけばいいと思います。