【python】googleアナリティクスのデータをapiを使って取得する

未分類

 

最近うと自分のサイトの分析をしたいなと思い立ち、以前からサイトに設置しているGoogleアナリティクスのデータを使った分析を行うため、googleが提供しているAPIを使って自分のサイトのアクセスデータを取得していきたいと思います。

 

 

前準備

 

プライベートAPIなので、まずはサイトにアクセスして自分のAPI鍵を発行する必要があります。

 

基本的には以下のクイックスタートのとおりに進めていきます。

 

GoogleのAPIを使用するために必要なのはこの4つの条件を満たしていることです。

 

  • Developer ConsoleでGoogle AnalyticsのAPIが有効化されている
  • 秘密鍵のファイル(p12/json)が手元にある
  • API用のメールアドレスを作成済み
  • API用のメールアドレスを、Google Analyticsの該当のビューに権限付与済み

 

 

これをざっくりいうと、GoogleのプライベートAPIを利用するためには、「アナリティクスのAPI有効化」「プロジェクト・サービスアカウントを作成「アナリティクスのビューへのAPI権限の追加」この3点が必要があるということです。

 

まずは「Google Cloud Platform」に登録し、APIを有効化します。

 

 

そのまま道なりに入力してAPIを有効化すればOKです。APIが有効化できたら次は以下のURLにアクセスして、新規プロジェクトを作成します。

Google Cloud Platform

 

 

 

 

作成したら、次はサービスアカウントを作成します。

 

 

 

 

サービスアカウントの説明とかは適当でOKです。

 

 

 

 

入力できたら一番下の「作成」をクリックしてから、キャンセルを押して、前の画面に戻ります。

 

 

 

 

戻ると↑のような感じで、サービスアカウントが作成されているので、右端のタブをクリックして「鍵を作成」をクリックして秘密鍵を作成してダウンロードします。

 

秘密鍵は、jsonかp12かどちらでもコードの記述がすこし変わるだけでさして問題ありませんが、ここではとりあえずjsonにしておきます。

 

そして次はGoogleアナリティクスを開いて、APIにアクセス権限を付与します。具体的には、APIで情報を取得したいサイトの管理ページにアクセスし、右端の「ユーザー管理」をクリックします。

 

 

 

 

すると現在ビューへのアクセス権限のあるユーザー一覧が表示されるので、ここにユーザーを追加します。

 

具体的には右上の[+]のボタンをクリックすると、追加するユーザーのメールアドレスを尋ねられるので、そこにさっき作ったサービスアカウントのメールアドレス(~~.gserviceaccount.com)を追加して保存します。

 

 

 

これで前準備は完了です。

 

 

APIからサイトのデータを取得する

 

それではここからはAPIを経由してGoogleアナリティクスにあるサイトのデータをPythonのスクリプトで取得したいと思います。

 

一応先ほど記載したリンクにGoogleアナリティクスの公式ページにPythonでのAPIの使い方のチュートリアルが載っているのですが、Python2.7で書かれているので、そのままコピペしてPython3で実行すると、printとかライブラリとかでエラーになります。

 

というわけで、いろいろ参考にしてPython3に書き換えました。まずは必要になるライブラリをインストールします。

 

 

# ターミナルで必要なライブラリをインストールする
$ pip install --upgrade google-api-python-client
$ pip install --upgrade oauth2client
$ pip install pyopenssl

 

 

PythonでNo module named oauth2client.service_accountが出た時は、oauth2clientが入っていないことが原因なので、インストールしておきましょう。

 

そして、こちらがサンプルコードになります。アレンジするのは「ローカル上での秘密鍵のパス」と「ViewID」と「アカウントID」3つです。

 

 

 

秘密鍵は自分のローカルのPCに落とした秘密鍵のパスで、アカウントIDは先ほどアナリティクスのビューに登録したサービスアカウントIDになります。

 

ビューIDはアナリティクスの「ビューの設定」を開くと表示されている数字になります。インデントなどおかしい場合はgithubの方のソースをコピペなりダウンロードして実行してみてください。

 

 

"""Hello Analytics Reporting API V4."""
import argparse
import os
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials 
import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
DISCOVERY_URI = ('https://analyticsreporting.googleapis.com/$discovery/rest')

KEY_FILE_LOCATION = "ここに秘密鍵ファイルのパスを入力"  (例:C:\\Users\\~~.json)
SERVICE_ACCOUNT_EMAIL = 'アカウントID'(例:~~.gserviceaccount.com)
VIEW_ID = 'ビューID'


def initialize_analyticsreporting():
    """Initializes an analyticsreporting service object.
    Returns:   analytics an authorized analyticsreporting servicobject.
    """
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        KEY_FILE_LOCATION, SCOPES)
    # Build the service object.
    analytics = build('analyticsreporting', 'v4', credentials=credentials)
    return analytics

def get_report(analytics):
    # Use the Analytics Service Object to query the Analytics Reporting API V4.
    return analytics.reports().batchGet(
        body={
            'reportRequests': [
                {
                    'viewId': VIEW_ID,
                    'pageSize': 10,
                    'dateRanges': [
                        {'startDate': '7daysAgo', 'endDate': 'today'}
                    ],
                    'metrics': [
                        {'expression': 'ga:pageviews'},
                    ],
                    'dimensions': [
                        {'name': 'ga:pagePath'}, {'name': 'ga:pageTitle'}
                    ],
                    'orderBys': [
                        {'fieldName': 'ga:pageviews', 'sortOrder': 'DESCENDING'},
                    ]
                }]
            }
    ).execute()

def print_response(response):
    """Parses and prints the Analytics Reporting API V4 response."""
    for report in response.get('reports', []):
        rows = report.get('data', {}).get('rows', [])
        for row in rows:
            print(row)

analytics = initialize_analyticsreporting()
response = get_report(analytics)
print_response(response)

参照:https://github.com/beginerSE/python-google_api/blob/master/g-analytics.py

 

 

これを実行すると、

 

{‘dimensions’: [‘/2018/04/17/post-194/’, ‘【Python】Jupyter notebookの基本的な使い方を分かりやす
く説明する’], ‘metrics’: [{‘values’: [‘277’]}]}
{‘dimensions’: [‘/2018/03/04/2018-03-04-211747/’, ‘Pythonで自動売買Botを作る①~システムトレード
の流れを把握する’], ‘metrics’: [{‘values’: [‘197’]}]}
{‘dimensions’: [‘/2017/08/31/2017-08-31-195852/’, ‘【Python】Anacondaのインストールと初期設定か
ら便利な使い方までを徹底解説!’], ‘metrics’: [{‘values’: [‘190’]}]}
{‘dimensions’: [‘/2018/10/11/post-963/’, ‘【Python】Djangoを使ってウェブサイトを作成する その①’], ‘metrics’: [{‘values’: [‘132’]}]}
{‘dimensions’: [‘/2018/11/25/post-1253/’, ‘【就職】IT企業の客先常駐民おる・・・?’], ‘metrics’:
[{‘values’: [‘115’]}]}
{‘dimensions’: [‘/2018/08/20/post-645/’, ‘【Python】Kerasでディープラーニングによる画像認識をや
ってみる’], ‘metrics’: [{‘values’: [’90’]}]}
{‘dimensions’: [‘/category/itまとめ/’, ‘ITまとめ | 湊の研究室’], ‘metrics’: [{‘values’: [’69’]}]}
{‘dimensions’: [‘/2018/06/27/post-436/’, ‘Windows10にTensorflowとKerasがインストールできない時の
解決法’], ‘metrics’: [{‘values’: [’66’]}]}
{‘dimensions’: [‘/2017/04/06/2017-04-06-000000/’, ‘【時系列分析】ARCHモデルとGARCHモデルの分かり
やすい解説’], ‘metrics’: [{‘values’: [’65’]}]}
{‘dimensions’: [‘/2018/08/22/post-593/’, ‘【Python】テクニカル指標が簡単に計算できるTa-libの使い
方’], ‘metrics’: [{‘values’: [’65’]}]}

 

こんな感じで自分のブログの人気記事を取得できます。

 

get_report()のリクエストパラメータの引数である'dateRanges'の部分で期間を指定しています。

 

他にもmetrics:を弄ると、ページビューだけではなく、セッション・滞在時間・ユーザー属性などの様々なアクセスデータを取得することも可能です。

 

そして最後の'orderBys'はSQLの要領でデータをソートするように指定しているだけです。

 

パラメーターのdimensionmetricsは膨大で全部説明すると長くなるので、他の指標や次元が気になる人はGoogleAnalyticsAPIの公式ドキュメントを参照してください。

 

 

 

参照記事

https://omohikane.com/python_no_module_oauth2client/

https://torina.top/detail/357/

https://developers.google.com/analytics/devguides/reporting/core/v4/samples?hl=ja

https://note.nkmk.me/python-google-analytics-reporting-api-download/

 

 

 

関連記事:【Python】TwitterのAPIを簡単操作できる「Tweepy」の使い方

 

関連記事:【Python】CoinGeckoのAPIからビットコイン・アルトコインの価格データを取得する

 

 

新着記事一覧
未分類
TKをフォローする
プログラミング速報

コメント