Qiitaには、GoogleAnalytics(GA)を埋め込む機能がある。
GAを見てみると、300 PV/Week というしょんぼりした数値・・・😞
以前、設定していて放置していたが、TDのブログでもGoogle AnalyticsのログをJavascript SDKを使って送る方法が掲載されたので、QiitaのGAのレポートをトレジャーデータに送ってみる。
セットアップ手順
- Google Analytics Profile ID
- Treasure Data API key
- Standalone Google Script Service with Analytics API enabled.
- Setup Google App Script
- Setup Trigger to run the script
Google Analytics Profile IDの取得
Google Analyticsにログインした状態で、Managementページに行く。
すると、URLにa<ACCOUNT_ID>w<WEB_PROPERTY_ID>p<PROFILE_ID>/
が付与されるので、p以下の値をメモる。
例: https://analytics.google.com/analytics/web/#management/Settings/a11111111w111111111p11111111/
Treasure DataのAPI KEYの取得
TreasureDataにサインアップした状態で、プロフィールのページにアクセスする。
Generate NewでWrite Only Keyを新規発行してメモする。
Google Analytics APIを有効化
Google Consoleにアクセスして、Analytics APIを有効化する。
Google App Scriptのプロジェクトと同じにするために、次の設定を行う際にリソース->Developer Consoleプロジェクトを開いて、スクリプトが関連づけられているプロジェクトから、有効化をすると楽かもしれない。
Google App ScriptでJavascript SDKを使ってTDにログを送る。
Google App Scriptにログインする。
また、上記ではプロジェクトに対してGoogle Analytics APIの有効化を行ったが、
Google App ScriptからもAnalyticsAPIの有効化を行う(参考:GoogleAppsScriptでGoogleAnalyticsのAPIを利用)。
リソース -> Googleの拡張サービスから、Google Analytics API (v3)を有効化する。
kiyoto-sanのスクリプトをコピる。
そして、コピペしたコードの一部を編集する。
特に、groupBy
とmetrics
とsortBy
で使える変数は、Analytics Reporting API V3を参照すること。ちなみに、現在v4がでているので、そのうちスクリプトを修正する必要があるかと思います。
修正点1: profileIdなどを上記で準備した値に変更
INPUTS = {
groupBy: ['country'],
metrics:['visits'],
sortBy:['visits'],
profileId: 'YOUR_GA_PROFILE_ID',
databaseName: 'google_analytics',
tableName: 'sample_report',
tdAPIKey: 'YOUR_TD_API_KEY'
}
修正点2: 条件チェックを外す
- if (!dimName.startsWith("ga:")) { dimName = "ga:" + dimName; }
+ dimName = "ga:" + dimName;
修正点3: 廃止予定の関数を修正
- var yesterdayStr = Utilities.formatDate(yesterday, Session.getTimeZone(), 'yyyy-MM-dd');
+ var yesterdayStr = Utilities.formatDate(yesterday, Session.getScriptTimeZone(), 'yyyy-MM-dd');
関数を選択で、main
を選択し、実行すると、国毎に集約されたPV数が出力される
トリガーの設定
上記で作成したスクリプトをトリガーを使って定期的に実行する。下記の設定で毎日1~2時頃に前日のGAのレポートをTDに出力できる。
まとめ
今回は、Qiitaのデータを取得しているGoogle Analyticsのレポートを、Google App ScriptからTDのJavascript SDKを利用して、定期的にデータを送る方法を紹介しました。