【2019年】PythonでGoogle Analyticsの情報を取得!

SEO

 

ブロガーたるもの、つねにブログの訪問者数やPV数などを確認したいものです。

 

そこで今回はAnalytics Reporting  API v4 を使って自ブログの情報を取得できるシステムを構築します。

 

スポンサーリンク

とりま公式に従う

 

他の方が書いたブログの情報が古い(3〜4年くらい前)ので、公式サイトを読んで作業しました。公式は比較的分かりやすかったものの、所々つまづいた箇所があったので、そこも紹介していきます。

 

ステップ1:APIを有効にする

 

 

サービスアカウントに貼られているリンクから飛んで、そこで新規にプロジェクト名を作成します。

 

 

最後まで項目を埋め込んだら「キーを作成」ボタンをクリック、その時にファイルの形式を問われるのでJSONを選択します。

 

これで秘密鍵が記入されたJSONファイルが作成されるので、それをclient_secrets.jsonに名前を変更、プログラムを実行させるディレクトリに置きます

 

キーを作成したと同時にメールアドレスが付与されたと思います(覚えがなければJSONファイルを参照)。今度はそのアドレスを使って Google Analytics のユーザー管理者を追加します。

 

ちなみに公式サイトにメアドのサンプルが貼られていますが、間違ってサンプルを貼らないで下さい。

 

まず自分のGoogle Analytics ページにログインし【設定】をクリック、右端にある【ユーザー管理者】をクリック。

 

あとは【追加】ボタンがあるので、そこにさっき取得したメアドを書いて新規ユーザーを作ります。与える権限は「表示と分析」です。

 

 

ステップ2:pipでクライアントライブラリをインスコ

 

次にコードを書くにあたり必要なライブラリをインストールします。

 

ターミナルで数のようにコマンドして下さい。

 

 

これで必要なライブラリをインストールできました。次はいよいよコードを書きます。

 

ステップ3: コードを書く

 

まあ、書くって言ってもサンプルコードをコピペするだけですけどね(笑)

 

その前にダウンロードしたJSONファイルを.pyファイルと同じディレクトリにあるのを確認して下さい。確認したら以下のコードをコピペします。

 

"""Hello Analytics Reporting API V4."""

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = '<REPLACE_WITH_JSON_FILE>'
VIEW_ID = '<REPLACE_WITH_VIEW_ID>'

def initialize_analyticsreporting():
  """Initializes an Analytics Reporting API V4 service object.

  Returns:
    An authorized Analytics Reporting API V4 service object.
  """
  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):
  """Queries the Analytics Reporting API V4.

  Args:
    analytics: An authorized Analytics Reporting API V4 service object.
  Returns:
    The Analytics Reporting API V4 response.
  """
  return analytics.reports().batchGet(
      body={
        'reportRequests': [
        {
          'viewId': VIEW_ID,
          'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}],
          'metrics': [{'expression': 'ga:sessions'}],
          'dimensions': [{'name': 'ga:country'}]
        }]
      }
  ).execute()

def print_response(response):
  """Parses and prints the Analytics Reporting API V4 response.

  Args:
    response: An Analytics Reporting API V4 response.
  """
  for report in response.get('reports', []):
    columnHeader = report.get('columnHeader', {})
    dimensionHeaders = columnHeader.get('dimensions', [])
    metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])

    for row in report.get('data', {}).get('rows', []):
      dimensions = row.get('dimensions', [])
      dateRangeValues = row.get('metrics', [])

      for header, dimension in zip(dimensionHeaders, dimensions):
        print header + ': ' + dimension

      for i, values in enumerate(dateRangeValues):
        print 'Date range: ' + str(i)
        for metricHeader, value in zip(metricHeaders, values.get('values')):
          print metricHeader.get('name') + ': ' + value

def main():
  analytics = initialize_analyticsreporting()
  response = get_report(analytics)
  print_response(response)

if __name__ == '__main__':
  main()

 

公式サンプルをそのまま載せますが、コードがPython2系で書かれてますので注意して下さい。

 

KEY_FILE_LOCATIONJSONのファイル名を代入します。

 

そしてVIEW_IDですが、

 

Google Analyticsの【設定】→【ユーザー管理者】→新規追加したユーザーの項目の右端【ユーザーの情報の詳細を表示】→アカウントのタブ→自サイトのタブ→【全てのウェブサイトのデータ】の隣の数字を記入して下さい

 

どこぞのブログで「アカウントIDを記入して下さい」と書かれていて、真に受けたら数時間ムダにしてしまいました。アカウントIDは記入しないで下さい。

 

記入して実行ボタンを押すと、7日間のセッション数とアクセスした訪問者の国が表示されます。

 

 

ちなみにモジュールをインポートするとき、

 

import apiclient.discovery import build

 

で実行できずにエラーが出た場合、

 

from googleapiclient.discovery import build

 

で試してみて下さい。

 

どこぞのサイトに載っていた解決策でしたが上手く動きました。

 

 

取得する情報を変更

 

デフォルト設定では一週間のセッション数と国が表示されます。でも今回は一日の訪問者数とデバイスの種類を表示するように設定を変更します。

 

大雑把に説明すると、サンプルコードは辞書型を利用して検索結果を操作しています。したがってキーを変更して得られるバリューを変えます。

 

コードの中頃にdate range、dimention、metric があります。まずはdaterangeのstartdayとenddayをそれぞれYesterdayにします。

 

次にmetricsのexpressionをga:usersに変えます。最後にdimentionsをga:deviceCategoryに変えます。

 

 

長いコードの割に変更は意外と簡単ですね、そして実行結果がこちら。

 

 

デスクトップから17人、モバイルから40人が訪れているということが分かりました。やっぱり今時スマホからの方が多いですね。

 

これを応用すれば、夜中12時になったらLINEなりメールで日々のレポートを通知させたり、CSVに更新情報を逐一書き込んだりすることも出来ます。

 

【参考記事】スクレイピングで得た情報をGmailで送信する

 

まとめ

 

以上、Google Anapyticsの情報を取得する方法の紹介でした。他ブログの情報が古いわ、公式サイトを真似たらエラーが出るわで、今回は検索能力が試される作業でした。

 

しかし出来るようになると便利だなと実感したので、皆さんも是非やってみて下さい。

 

ちなみに取得情報の変更で使ったキーは公式サイトで一覧として見ることが出来ます。英語ですが日々GoogleAnalyticsを触っていれば、なんとなく分かると思います。