2014-10-15

Google Analytics APIでキーワードを取得する②

注意


本記事内で利用しているGoogleクライアントログイン(ClientLogin)による認証方式および、Google Analytics API v2.2は現在利用できません
以下に新しい認証方式であるOAuth2.0および、Google Analytics API v3を利用したアクセス方法をまとめていますので、こちらをご覧ください。




 前回記事


前回は、お気軽方式としてcurlコマンドを用いたシェルスクリプトにて取得する方法を記載しました。
今回は、もう少し扱いやすい形を出力できるようpythonを用いてTSV形式で出力できるようにします。

少し手の込んだ方式(gdata-python-clientを用いたpythonプログラムにて取得)

※参考文献は公式
※前提としてpythonが動くlinux環境があるものとします。

gdata-python-clientのインストール


モジュールはここから最新版のgdata_python-clientをダウンロードして解凍してインストールする形で簡単です。
コマンドベースだと次のような手順です。モジュールバージョンは執筆時点最新のVer. 2.0.18です。


#> wget https://gdata-python-client.googlecode.com/files/gdata-2.0.18.tar.gz
#> tar zxvf gdata-2.0.18.tar.gz
#> cd gdata-2.0.18
#> python setup.py install

pythonプログラムの作成

前回のcurlシェルと見比べていただければわかりますが、ほぼ同じことをpythonでやっているだけです。

dataFeed.pyという名前(名前は何でもよい)で作成しています。
============================
# -*- coding: utf-8 -*-
import gdata.analytics.client
import gdata.client

# Google Analytics 接続
user_id = "xxxx@gmail.com"
password = "xxxx"
gacli = gdata.analytics.client.AnalyticsClient()
gacli.ClientLogin(user_id, password, 'curl-dataFeed-v2')

# パラメータ設定
table_id = "ga:99999999"
start_date = "2014-09-01"
end_date = "2014-09-30"
start_index = "1"
max_results = "50000"
params = {
    'ids': table_id,
    'start-date': start_date,
    'end-date': end_date,
    'dimensions': 'ga:keyword',
    'metrics': 'ga:visits',
    'sort': '-ga:visits',
    'filters': 'ga:keyword!=(not set);ga:keyword!=(not provided);ga:keyword!=(other)',
    'start-index': start_index,
    'max-results': max_results,
}

# クエリー発行
data_query = gdata.analytics.client.DataFeedQuery(params)
feed = gacli.GetDataFeed(data_query)
result = None
for entry in feed.entry:
  tmp = {'keyword':'', 'visits':0}
  for dim in entry.dimension:
    if dim.name == 'ga:keyword':
      tmp['keyword'] = dim.value
  for met in entry.metric:
    if met.name == 'ga:visits':
      tmp['visits'] = int(met.value)
  result.append(tmp)

# ファイル書き込み
fp = open('dataFeed.tsv', 'w')
for row in result
  fp.write(row['keyword'].encode('utf-8') + "\t" + str(row['visits']) + "\r\n")
fp.close()

============================

- user_id : Google AnalyticsのGmailアカウント名
- password : Gmailアカウントのパスワード
- table_id : 「アナリティクス設定」>「ビュー設定」と進み表示される「ビューID」を"ga:99999999"形式にて設定

ここでは、キーワードをセッション数の多い順に並べ替えて取得するので
- ディメンジョン : "ga:keyword" ・・・ キーワード
- メトリクス : "ga:visits" ・・・ セッション数(訪問数)
- ソート順 : "-ga:visits" ・・・ セッション数(訪問数)の降順
と指定し、さらにリファラがとれなかった(not provided)ものやリファラがついてなかった(not set)、それ以外の理由でとれなかった(other)というものは集計のじゃまになるのでフィルターしています。

また、集計する期間として9月分を取得するので
- start_date : 2014-09-01
- end_date : 2014-09-30
とYYYY-MM-DD形式で指定しています。

あと、max_resultsは一度に取得する数を指定するのですが、今は便宜的に5万件としているのですが、実際に上記を元にしたプログラムを作成する場合は、1度に取得する件数は5000件程度にして、それをstart_indexをインクリメントしながら全部取りきるまでループさせるようにしたほうがよいです。

今回は方法論だけの記載なのでそこまで作りこみは行いませんw

実行方法と取得結果サンプル

このプログラムはカレントディレクトリにdataFeed.tsvというTSVファイルが出力されます。

$> python dataFeed.py

こんな感じです。これの結果ファイルの中身は次のような感じになります。

dataFeed.tsvの内容サンプル
============================
ドレスアップ    3
外車    2
価格    2




============================

XMLよりもTSVのほうが集計する用途では優秀ですので前回のcurlよりも使い勝手が良いと思います。