Google Analytics API+D3.jsでブログ記事ごとのアクセス数をビジュアライズしてみました。
基本事項
Google Analytics APIではGoogleによって集計されたデータを取得することができます。つまり、APIで取得できるのはGoogle Analyticsの管理画面で閲覧できる情報と同等である、ということです。一個一個のアクセスデータを取得したい場合はGoogle Analytisのプレミアプラン(月額130万!)に登録して、BigQueryにインポートすればOKです。詳細はこちらを参照↓ Googleアナリティクスプレミアム+Big Queryで実践する、カスタマージャーニーセミナー 第二部
Google Analytics APIを手軽に試す
各種設定をしなくても、以下のURLからOAuth2.0でGoogle AnalyticsのAPIを試すことが可能です。GAによる集計結果を取得したい場合はanalytics.data.ga.getを利用することになります。代表的なパラメータの説明はこんな感じ
- ids
ビューの名前をセットします。ビューIDの確認の方法は以下のURLを参考にしてください。↓ http://www.teradas.net/archives/11637/
- start-date
抽出するログの開始日を指定します。YYYY-MM-DD形式だけでなくtoday等の相対日付を利用することも可能です。
- end-date
抽出するログの終了日を指定します。
- metrics
測定する値を指定します。セッション数であれば”ga:sessions”、ページビュー数であれば”ga:pageviews”を指定します。
各ディメンションやメトリクスに対するパラメータ値はDimensions & Metrics Explorerに記載されています。設定
Developer ConsoleでAnalytics APIを有効化して、サービスアカウントを作成します。まずは[権限]の[サービスアカウント]から[サービスアカウントを作成]ボタンを押下します。
次に各種情報を入力します。新しい秘密鍵の提供にチェックを付けて[作成]ボタンを押下してください。キーのタイプはJSON、p12のどちらでも問題ないです。(下記のpythonコードはJSONファイルを想定)
pythonコードを記述
pipで依存ライブラリをインストール$ pip install httplib2
$ pip install google-api-python-client
コードはこんな感じで。KEY_LOCATIONはサービスアカウント作成時に取得した秘密鍵入りJSONファイルのパス、SERVICE_ACCOUNT_EMAILはサービスアカウントID、VIEW_IDはGoogle AnalyticsのビューIDを指定します。
#!/usr/bin/python
# -*- coding: utf-8 -*-
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
import json
import httplib2
import re
KEY_LOCATION = '/path/to/file.json'
SERVICE_ACCOUNT_EMAIL = 'hoge@example.iam.gserviceaccount.com'
VIEW_ID = '********'
def get_service(api_name, api_version, scope, key_file_location,
service_account_email):
credentials = ServiceAccountCredentials.from_json_keyfile_name(
key_file_location, scopes=scope)
http = credentials.authorize(httplib2.Http())
# Build the service object.
service = build(api_name, api_version, http=http)
return service
service = get_service(
'analytics',
'v3',
['https://www.googleapis.com/auth/analytics.readonly'],
KEY_LOCATION,
SERVICE_ACCOUNT_EMAIL
)
results = service.data().ga().get(
ids='ga:' + VIEW_ID,
start_date='yesterday',
end_date='yesterday',
metrics='ga:pageviews,ga:sessions',
dimensions='ga:pagePath',
sort='-ga:pageviews').execute()
# d3.jsの表示用に加工
p = re.compile('/blog/([^/]+)/')
children = []
for row in results.get('rows'):
match = p.match(row[0])
if match is not None and int(row[1]) > 4:
children.append({
"name": match.groups()[0],
"size": row[1]
})
print json.dumps({
"name": "Data",
"children": children
})
D3.jsでビジュアライズ
ブログのページビュー数でバブルチャート作ってみました。実はsambaの記事が売れまくってるのです。