GoogleAnalytics情報をPythonで取得

目的

自分で管理しているGoogleAnalytics上のWebサイトのPV数をPythonを利用して取得
最終的には7セグLEDに定期的にPV数を表示する

利用するライブラリ

$ python -V
Python 2.7.9

$ pip list | grep -E 'google|gflag|httplib'
google-api-python-client (1.4.0)  
httplib2 (0.9)  
python-gflags (2.0)  

ファイル構成

  • analytics_api_v3_auth.py
  • analytics_api_v3.py
  • client_secrets.json

OAuth用jsonファイルの取得 (client_secrets.json)

  1. Google Developers Consoleにアクセス
  2. 新しいプロジェクトを作成
  3. 左メニュー APIと認証-APIへアクセス
    上部検索ボックスにて 「Analytics」 で検索し有効とする
    引き続き右ペイン 上メニュー Enabled APIsより確認/不要なAPIをOffにできる
  4. 左メニュー APIと認証-認証情報へアクセス
    右ペイン OAuth → 新しいクライアントIDを作成
    アプリケーションの種類 :「インストールされているアプリケーション」を選択
    インストールされているアプリケーションの種類 : 「その他」を選択
    [クライアントIDを作成] を押下
    右ペインに ネイティブ アプリケーションのクライアント ID が表示され
    認証情報の記載された JSONをダウンロードできるうになる
    ※同意画面の作成に飛ばされたら適当に入力 後述する実行時の画面となります

プロジェクトディレクトリ下に下記名前で保存
client_secrets.json

プログラムの設置

analytics_api_v3_auth.py (OAuthヘルパーファイル)

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import httplib2

from apiclient.discovery import build

from oauth2client.client import flow_from_clientsecrets  
from oauth2client.file import Storage  
from oauth2client.tools import run

CLIENT_SECRETS = 'client_secrets.json'  
MISSING_CLIENT_SECRETS_MESSAGE = '%s is missing' % CLIENT_SECRETS

FLOW = flow_from_clientsecrets(CLIENT_SECRETS,  
                               scope='https://www.googleapis.com/auth/analytics.readonly',
                               message=MISSING_CLIENT_SECRETS_MESSAGE)

TOKEN_FILE_NAME = 'analytics.dat'

def prepare_credentials():  
    storage = Storage(TOKEN_FILE_NAME)
    credentials = storage.get()
    if credentials is None or credentials.invalid:
        credentials = run(FLOW, storage)
    return credentials

def initialize_service():  
    http = httplib2.Http()

    #Get stored credentials or run the Auth Flow if none are found
    credentials = prepare_credentials()
    http = credentials.authorize(http)

    #Construct and return the authorized Analytics Service Object
    return build('analytics', 'v3', http=http)

analytics_api_v3.py (プログラム本体)

とりあえず単体でも実行できるように作成してみました

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import sys

# import the Auth Helper class
import analytics_api_v3_auth

from apiclient.errors import HttpError  
from oauth2client.client import AccessTokenRefreshError

def main(argvs):  
    service = analytics_api_v3_auth.initialize_service()

    try:
        results = service.data().ga().get(
            ids        = 'ga:' + argvs[1],
            start_date = argvs[2],
            end_date   = argvs[3],
            metrics    = 'ga:pageviews').execute()
            # fileter条件を利用する場合は下記
            # filters    = 'ga:pagePath==/page_name').execute()

    except TypeError, error:
        # Handle errors in constructing a query.
        print ('There was an error in constructing your query : %s' % error)

    except HttpError, error:
        # Handle API errors.
        print ('Arg, there was an API error : %s : %s' %
               (error.resp.status, error._get_reason()))

    except AccessTokenRefreshError:
        # Handle Auth errors.
        print ('The credentials have been revoked or expired, please re-run '
               'the application to re-authorize')

    return results

if __name__ == '__main__':  
    if (len(sys.argv) != 4) :
        print 'Usage python %s gaID start_date end_date' % sys.argv[0]
        quit()
    results = main(sys.argv)
    print results.get('rows')[0][0]

実行結果

初回実行時に下記のようなダイアログが出て認証を求められます

指定するビューIDの取得方法 (UA-で始まるIDは利用しません)

GoogleAnalytics管理画面より下記手順にて取得できます
アナリティクス設定→ビュー設定を選択 ビューIDを取得 (上図の赤線部分にIDがあります)

正常問い合わせ時

$ ./analytics_api_v3.py 9xxxxxx9 2015-03-01 2015-03-31
1001  

何かしらエラーがある場合

$ ./analytics_api_v3.py 9xxxxxx9 2015-03-01 2015-03-32
Arg, there was an API error : 400 : Invalid Date specified: 2015-03-32  
Traceback (most recent call last):  
  File "./analytics_api_v3.py", line 43, in <module>
    results = main(sys.argv)
  File "./analytics_api_v3.py", line 37, in main
    return results
UnboundLocalError: local variable 'results' referenced before assignment  

Source

参考サイト

http://ytsuda.hateblo.jp/entry/2013/10/18/195742
ありがとうございました

how to install pip Library

https://developers.google.com/api-client-library/python/apis/analytics/v3

basically usage of api

https://developers.google.com/analytics/solutions/articles/hello-analytics-api

takashi