概要
Google Analyticsで計測しているページビューを自動で毎日Treasure Dataへ送信したいので調べたことをメモしておく。
ファイル構成
ファイル一覧
├ diffs
│ │ # 最後に登録したレコード情報を保持する(自動作成されます)
│ └ daily_ga_pageview.yml
│
├ credencials
│ │ # GoogleAPI認証情報 (Google Service Account)
│ └ google-service-account.json
│
│ # 環境変数の定義スクリプト
├ secrets.sh
│
│ # レポート取得 & TDへの送信処理
└ daily_google_analytics_pageviews_to_td.yml.liquid
環境変数
下記シェルスクリプトを作って環境変数を自動定義する。
./secrets.sh
#!/bin/bash
# 環境設定(production, testing, development, local)
export EMBULK_ENV='local'
# 出力DBのプレフィックス (local: replace with environment)
export DB_PREFIX='local_'
# GoogleAPI認証情報
export GOOGLE_API_JSON=`cat ./credencials/google-service-account.json`
# TreasureData API Key
# ※ https://console.treasuredata.com/app/users/current
export EMBULK_TREASURE_DATA_API_KEY='1000/******************************'
クレデンシャル情報
Google Analyticsへアクセスするため、GCPでサービスアカウントを発行して権限を付与する。
※ 設定方法は省略します
./credencials/google-service-account.json
{
"type": "service_account",
"project_id": "hoge-00",
"private_key_id": "*********************************",
"private_key": "-----BEGIN PRIVATE KEY-----**************-----END PRIVATE KEY-----\n",
"client_email": "fuga@hoge-00.iam.gserviceaccount.com",
"client_id": "************************",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/fuga%hoge-00.iam.gserviceaccount.com"
}
処理
下記2種類のコマンドを作成します。
- 通常実行コマンド(差分追加)
- 期間を指定して強制的に登録するコマンド
./daily_google_analytics_pageviews_to_td.yml.liquid
#
# ページビューをGoogleAnalyticsから取得し、TreasureDataへ送信する
#
# ex) 通常コマンド (昨日のレポートを登録する - 差分追加)
# $ source ./secrets.sh; embulk run ./daily_google_analytics_pageviews_to_td.yml.liquid -c diffs/daily_ga_pageview.yml
#
# [オプション]
# ・ 開始日: START_DATE=YYYY-MM-DD
# ・ 終了日: END_DATE=YYYY-MM-DD
#
# ex) 指定期間のデータを強制的に登録する
# $ source ./secrets.sh; START_DATE=2018-05-20 END_DATE=2018-05-30 embulk run ./daily_google_analytics_pageviews_to_td.yml.liquid
# ※ 注意: -c オプションは付けない
#
{% if env.EMBULK_ENV == 'production' %}
{% assign view_id = '100000000' %}
{% else %}
{% assign view_id = '100000001' %}
{% endif %}
in:
type: google_analytics'
auth_method: 'service_account'
json_key_content: {{ env.GOOGLE_API_JSON }}
view_id: {{ view_id }}
time_series: 'ga:date'
start_date: {{ env.START_DATE | default: 'yesterday' }}
end_date: {{ env.END_DATE | default: 'yesterday' }}
incremental: true
metrics:
- "ga:pageviews"
out:
type: td
apikey: {{ env.EMBULK_TREASURE_DATA_API_KEY }}
endpoint: api.treasuredata.com
database: '{{ env.DB_PREFIX }}hoge'
table: 'daily_google_analytics_pageviews'
mode: append
default_timezone: 'Asia/Tokyo'
default_timestamp_format: '%Y-%m-%d'
実行
下記コマンドで実行してみる。
ターミナル
$ source ./secrets.sh; embulk run ./daily_google_analytics_pageviews_to_td.yml.liquid -c diffs/daily_ga_pageview.yml
※ 昨日(2018-05-20)のページビューが登録される。
再実行 (差分追加なので登録されない)
ターミナル
$ source ./secrets.sh; embulk run ./daily_google_analytics_pageviews_to_td.yml.liquid -c diffs/daily_ga_pageview.yml
※ ./diffs/daily_ga_pageview.yml に最後に登録されたデータの情報があるので、昨日(2018-05-20)のデータはスキップされて登録されません。
期間指定をして、強制的に登録してみる。
ターミナル
$ source ./secrets.sh; START_DATE=2018-05-01 END_DATE=2018-05-19 embulk run ./daily_google_analytics_pageviews_to_td.yml.liquid
※ 2018-05-01〜2018-05-19が登録される。
※ -c オプションは付けない (付けると登録されないので注意!!)