目的
自分で管理している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)
- Google Developers Consoleにアクセス
- 新しいプロジェクトを作成
- 左メニュー APIと認証-APIへアクセス
上部検索ボックスにて 「Analytics」 で検索し有効とする
引き続き右ペイン 上メニュー Enabled APIsより確認/不要なAPIをOffにできる
- 左メニュー 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