スクリーンショット_2019-11-16_11

PythonでGoogle AnalyticsにAPIアクセスしてデータ取得する

「Google Analyticsで表示されてるPVとか記事URLとかをプログラムで扱えるようになりたいな〜」と思うことありますよね。

今回は、そんな方のためにGoogle Analytics APIの設定をして、Google Analyticsの任意のデータをSpread Sheetに書き込む処理をPythonで書く方法をまとめます。


以下のような方にこの記事を読んでいただければと思います。

・ブログ運営していてPVの多い記事の分析をしている作業を自動化したい
・Google Analytics APIで取得したデータを元に任意の条件の記事の編集・削除などをプログラムで自動化したい



できるようになること

Google Analyticsで表示されているPVやSession、記事URLなど各データをPythonプログラムで取得できるようになります!


事前準備として必要なものは以下です。

・自分のブログやメディアでGoogle Analyticsの設定をしている(Google Analyticsでサイトの数値を見れるようになっていればOK)
・Googleアカウント(Google Analyticsを利用しているならあるはず)

それでは、実際に作業を進めていきましょう!



Google AnalyticsにAPIでアクセスできるように設定

まずは、Google AnalyticsにAPIでアクセスしてデータ取得できるように設定をしていきます。

Analytics Reporting APIの有効化と設定

Google Cloud Platform(Googleの提供しているAPIなどを管理できるサービス)の以下ページに遷移します。


Google Cloud Platformに遷移したら、以下のAnalytics Reporting APIのアプリケーション登録画面に遷移するので、「同意して続行」をクリックします。

スクリーンショット 2019-11-16 7.58.47

(Google Cloud Platformにアカウント登録したことがない場合、アカウント登録を先に求められるかもしれません。その場合は画面にしたがってアカウント登録完了させてから作業をすすめてください。)


「同意して続行」をクリックすると、APIが有効化された旨の画面に遷移します。ここで「認証情報に進む」をクリックして認証情報登録画面に遷移します。

スクリーンショット 2019-11-16 7.59.12


プロジェクトへの認証情報追加画面に遷移したら「サービスアカウント」をクリックします。

スクリーンショット 2019-11-16 7.59.51


「サービスアカウントを作成」をクリックします。

スクリーンショット 2019-11-16 8.00.07


サービスアカウント名・サービスアカウントID・サービスアカウントの説明に任意の値を入力して「作成」をクリックします。

スクリーンショット 2019-11-16 8.01.12


「役割」を任意のものにして、「続行」をクリックします。

スクリーンショット 2019-11-16 8.02.20


「キーを作成」をクリックします。

スクリーンショット 2019-11-16 8.02.42


「キーのタイプ」がJSONになっている状態で、「作成」をクリックします。

スクリーンショット 2019-11-16 8.03.24


認証に利用するjsonファイルがダウンロードされます。これは後ほどプログラムで利用するので保管しておきます。

スクリーンショット 2019-11-16 8.03.49

また、このファイルが漏れてしまうと自由にAPIアクセスされてしまう(Google Analyticsのデータが取得できてしまう)ので、外部に漏れないように注意しましょう。


認証情報の取得ができたら、サービスアカウント詳細画面で「メール」の項目に表示されているメールアドレスを控えておきます。

スクリーンショット 2019-11-16 8.04.33


Google AnalyticsにAPIユーザーを追加

次に、Google AnalyticsにAPIユーザーを追加することで、指定のGoogle Analyticsに対してAPIがアクセスできる権限を与えます。


Google Analyticsにアクセスして、メニュー左下の「管理」をクリックします。

スクリーンショット 2019-11-16 9.30.58


「ユーザー管理」をクリックします。

スクリーンショット 2019-11-16 9.31.23


左上の「+」ボタンをクリックして、「ユーザーを追加」をクリックします。

スクリーンショット 2019-11-16 9.31.49


メールアドレス欄に、サービスアカウント詳細画面で「メール」の項目に表示されていたメールアドレスを入力して、「追加」をクリックします。

スクリーンショット 2019-11-16 9.32.19


ユーザーが追加されていればOKです。

スクリーンショット 2019-11-16 9.32.32


以上で、Google AnalyticsにAPIアクセスするための設定は完了です。



Google AnalyticsのデータをAPIで取得する

では、Google AnalyticsのデータをAPIで取得してみましょう。

Pythonでプログラムを書いていくので、Pythonの実行環境が用意できていない方は、以下の記事の「Pythonの実行環境の準備」に書いてある内容を元にPythonを実行できる環境を用意しておいてください。


Pythonの実行環境が用意できたら、Terminalで以下のコマンドを打ち込んで、GoogleのAPIにアクセスするためのライブラリをインストールします。

$ pip install --upgrade google-api-python-client


次に、任意のフォルダで「google_analytics_access.py」というPythonファイルと、先ほど取得した認証用のjsonファイルを以下のようなファイル構成とします。

GoogleAnalytics
 - google_analytics_access.py
 - google_analytics_access.py

MacのFinderで見ると↓以下のようになっている状態にします。

スクリーンショット 2019-11-16 9.19.05


次に、google_analytics_access.pyにプログラムを書いていきます。

google_analytics_access.py

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

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = 'ご自身のjsonファイル名で書き換えます'
VIEW_ID = 'ご自身のGoogle AnalyticsのIDで書き換えます'


def initialize_analytics_reporting():
   credentials = ServiceAccountCredentials.from_json_keyfile_name(KEY_FILE_LOCATION, SCOPES)
   return build('analyticsreporting', 'v4', credentials=credentials)


def get_report(analytics):
   request_body = {
           'reportRequests': [{
               'viewId': VIEW_ID,
               'pageSize': 10,
               'dateRanges': [{'startDate': '2019-11-01', 'endDate': 'today'}],
               'metrics': [{'expression': 'ga:pageviews'}],
               'dimensions': [{'name': 'ga:pagePath'}, {'name': 'ga:pageTitle'}],
               'orderBys': [{'fieldName': 'ga:pageviews', 'sortOrder': 'DESCENDING'}]
           }]
   }
   return analytics.reports().batchGet(body=request_body).execute()


def print_response(response):
   for report in response.get('reports', []):
       column_header = report.get('columnHeader', {})
       dimension_headers = column_header.get('dimensions', [])
       metric_headers = column_header.get('metricHeader', {}).get('metricHeaderEntries', [])

       for row in report.get('data', {}).get('rows', []):
           print('-----------------------------')
           dimensions = row.get('dimensions', [])
           date_range_values = row.get('metrics', [])
           for header, dimension in zip(dimension_headers, dimensions):
               print(header + ': ' + dimension)
           for i, values in enumerate(date_range_values):
               for metricHeader, value in zip(metric_headers, values.get('values')):
                   print(metricHeader.get('name') + ': ' + value)


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


if __name__ == '__main__':
   main()

「KEY_FILE_LOCATION」と「VIEW_ID」は、それぞれご自身の認証用のjsonファイル名と、Google AnalyticsのIDで書き換えます。


Google AnalyticsのIDは、Google Analyticsにアクセスした時のURLの最後の「...w...p...」のpより後ろの部分です。(僕のIDでいうと、169485297が該当しますね。)

スクリーンショット 2019-11-16 8.38.51


以上でGoogle Analyticsからデータ取得するプログラムが正しく動くはずなので、Terminalに「$ python google_analytics_access.py」と打ち込んで、「google_analytics_access.py」を実行してみましょう。

$ python google_analytics_access.py

-----------------------------
ga:pagePath: /entry/2018/09/14/193000
ga:pageTitle: Webサービスを個人で開発して月10万円以上稼いでいる事例まとめ - 仮想サーファーの日常
ga:pageviews: 5387
-----------------------------
ga:pagePath: /entry/2018/03/10/190000
ga:pageTitle:1で絶食する日を1ヶ月続けたら、絶食推進派になってしまった話 - 仮想サーファーの日常
ga:pageviews: 3355
-----------------------------
ga:pagePath: /entry/2018/03/14/190000
ga:pageTitle: 「福岡は女性が多くて男性はモテやすい!」って本当?実際に数値調べてみた - 仮想サーファーの日常
ga:pageviews: 784
-----------------------------
ga:pagePath: /entry/2018/07/08/190000
ga:pageTitle: 【Python初心者〜中級者向け】半年間でPython未経験が趣味で作ったものと学んだこと - 仮想サーファーの日常
ga:pageviews: 747
-----------------------------
ga:pagePath: /
ga:pageTitle: 仮想サーファーの日常
ga:pageviews: 722
-----------------------------
ga:pagePath: /entry/2018/04/13/190000
ga:pageTitle: Gitで「fatal: unable to access The requested URL returned error: 403」 - 仮想サーファーの日常
ga:pageviews: 675
-----------------------------
ga:pagePath: /entry/2018/09/08/100413
ga:pageTitle: 【Pythonエラー解決】「TypeError: unhashable type: xxx」 - 仮想サーファーの日常
ga:pageviews: 536
-----------------------------
ga:pagePath: /entry/2018/05/14/110000
ga:pageTitle: 深セン(蛇口)からマカオ(外港)までフェリーで行く方法・航行時刻表 - 仮想サーファーの日常
ga:pageviews: 499
-----------------------------
ga:pagePath: /entry/2018/09/20/193000
ga:pageTitle: 半年間水を主飲料にする生活を続けてきて自分の身におきた変化 - 仮想サーファーの日常
ga:pageviews: 487
-----------------------------
ga:pagePath: /entry/2018/02/16/190000
ga:pageTitle: 短時間と最安と最低限の栄養を追求した結果、こんな食生活になりました。 - 仮想サーファーの日常
ga:pageviews: 469


僕のサイトの場合は、上記のような結果が表示されました。2019年11月1日から今日までのPVの多い順に記事のURLとタイトルとPVを表示できました。



ここまでの作業で頻出するエラーとその解決方法

「google_analytics_access.py」を実行して、「User does not have any Google Analytics account.」というエラーが出る場合は、Google AnalyticsにAPIユーザーのメールアドレスを登録できていない可能性があります。

$ python google_analytics_access.py

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json returned "User does not have any Google Analytics account.">

下記のサイトで、ご自身のGoogle AnalyticsのViewIDを確認できるので、再度確認してみてください。



他にもGoogle AnalyticsにAPI経由でアクセスしてデータ取得したい場合

他にも様々な条件でデータを取得することができるので、ぜひいろいろ試してみてください。

↓取得できるデータや、条件指定したいものはあるかどうかはこちらのGoogle公式ドキュメントを参考にしてみてください!



# 3. さいごに

Twitterでも、Webエンジニアの方向けの情報とか、プログラミングのこととかツイートしているので、よければフォローしてやってください!


Qiitaではエンジニアの方向けの記事をメインで書いてます。(数回トレンド入り!)


自由気ままに気になったことや試してみたことを雑記ブログにまとめたりもしております( ・v・)b



※ チュートリアルではプログラミング初心者の方でも分かりやすく、不具合が起きないように注意して文章をまとめていますが、本チュートリアルによって生じた、データの欠損、不利益などに関して、本著者は一切の責任を負うことができません。ご注意ください。

ここから先は

0字
ブログの運用を効率化したい方は必見

Pythonでブログの記事作成・更新・分析などを自動化するプログラムのチュートリアル記事をまとめています。

この記事が気に入ったらチップで応援してみませんか?