2023-09-30
ホームページをレンタルサーバーで作成してページアクセス数などをGoogle Analyticsを使って確認している場合。
定期的に、そのホームページに「どの記事が人気か(アクセスがあるか)」などの情報を自動的に表示させたい場合がある。
CORESERVERなど、レンタルサーバーがSSH利用OKでかつPythonを実行できる環境であるなら、自分のローカルディレクトリにGoogle AnalyticsのPythonモジュールをインストールすれば、上記情報をAPIで取得しホームページを更新するなどに使える。
1、Google Analytics Reporting APIの使用準備
Google Analyticsを使用しているGmailアカウントに切り替えて、Google Cloud Platformへアクセスする。
https://console.cloud.google.com/
利用開始を承認して、「新しいプロジェクトを作成」
特にいじらずデフォルトの名前で「作成」し、しばらく待つとプロジェクトができてダッシュボードになるので、
APIとサービス→APIとサービスを有効化とし、Google Analytics APIを選択し「有効」とする。
すると認証情報が必要になる場合があります、と出るのでそのまま「認証情報を作成」とする。
「必要な認証情報の種類を調べる」にて、
・Google Analytics APIを選択
・必要な認証情報
APIを呼び出す場所:ウエブサーバー
アクセスするデータの種類:アプリケーションデータ
App Engine または Compute Engine でこの API を使用する予定はありますか?:いいえ使用していません
としOK、次に「サービスアカウントを作成する」
「サービスアカウント名」ここでは例えば
acc-analytics
と入力。
ロール:閲覧者 ※アクセス統計レポートをPythonで取得するだけなので閲覧のみ。
キーのタイプ:JSON
「次へ」で、アクセスキーファイルがJSONで作成され自動ダウンロードされるので、ファイル名を
analytics-key.json
などと変更し、
レンタルサーバーでPythonを実行する自分のディレクトリにアップロードしておく。
2、Google Analytics管理画面での設定
Cloud Platform側の準備ができたので、いつも見ているAnalyticsの管理画面を開く。
左メニューの「管理」→アカウントユーザーの管理
右上の「+」を選択→ユーザーを追加
さきほどCloud Platformにて自動生成されたサービスアカウントの「メール」文字列をメールアドレスに貼り付ける。
acc-analytics@spatial-ship-XXXXXXX.iam.gserviceaccount.com
などという自動生成のメールアドレスのはずである。「ユーザーにメールを送信」とチェックされていてもそのまま大丈夫なはず。
権限は表示と分析のみ
「追加」とし、これでデータを取得できるようになった。
管理画面トップに戻って「ビューの設定」「基本設定」でビューIDという数値があるので、これを控えておく。
このビューIDと、さきほど生成されたアクセスキーファイル(analytics-key.json)を、サンプルPythonプログラムで指定することになる。
3、レンタルサーバー側からアクセスする準備
レンタルサーバーにroot権限などは無いはずなので、pipおよびモジュールを自分のホームディレクトリの.localに入れることになる。
なお、pythonプログラム本体はシステムのもので良い。(/usr/local/bin/python3.6)。
pip3.6のセットアップ
curl -O https://bootstrap.pypa.io/get-pip.py python3.6 get-pip.py --user
.local/以下にインストールされるので、.bashrc等を確認し、パスを通すようにする。
if [ -d $HOME/.local ]; then export PATH=$HOME/.local/bin:$PATH fi
確認
which pip ~/.local/bin/pip which pip3.6 ~/.local/bin/pip3.6
クライアントモジュールのインストール
pip3.6 install --upgrade google-api-python-client --user pip3.6 install --upgrade oauth2client --user
.local以下にインストールされるので、以下のように確認する。
python3.6 Python 3.6.8 (default, Jun 6 2019, 03:20:13) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from googleapiclient.discovery import build >>> quit()
エラーが出なければ、無事APIモジュールが使えるようになっている。
4、Google Analytics Reporting APIを呼んでレポートJSONを表示する
いよいよ実行してみる。ベースとなる、公式のサンプルは以下のものである。
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py?hl=ja
これを以下のように修正を加える。
・VIEW_IDを自分のビューID(数値)に変更する
・KEY_FILE_LOCATIONをキーJSONファイルのパスに変更する(analytics-key.json)
・print文のバーションがレンタルサーバーCORESERVERのpython3.6と合っていないので修正
・出力項目が少ないのでページタイトル・URLなどフル出力するようにする
・配列要素が無いなどのエラーが出るので帰ってきたresponseをそのままprintするだけにする(あとは利用者次第)
結果、以下のようなソースとなる。VIEW_ID,KEY_FILE_LOCATIONは自身のものに変えてください。
Python | analytics-report.py | GitHub Source |
"""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 = 'analytics-key.json' VIEW_ID = '123456789' 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:pageviews"}], "dimensions": [{"name": "ga:pagePath"}, {"name": "ga:pageTitle"}], "orderBys": [{"fieldName": "ga:pageviews", "sortOrder": "DESCENDING"}] }] } ).execute() def main(): analytics = initialize_analyticsreporting() response = get_report(analytics) print(response) if __name__ == '__main__': main()
実行
python3.6 analytics-report.py
結果
{'reports': [{'columnHeader': {'dimensions': ['ga:pagePath', 'ga:pageTitle'], 'metricHeader': {'metricHeaderEntries': [{'name': 'ga:pageviews', 'type': 'INTEGER'}]}}, 'data': {'rows': [ {'dimensions': ['/article.php?id=customize-benesse-challenge-touch-to-android', '進研ゼミチャレンジタッチをAndroid端末化する'], 'metrics': [{'values': ['500']}]}, {'dimensions': ['/article.php?id=javascript-find-filter-in-jsonarray', '【Javascript】JSON配列内にある特定要素の取得法【Node.js】'], 'metrics': [{'values': ['400']}]}, {'dimensions': ['/article.php?id=hackintosh-macos-and-windows', '【Hackintosh】組立PCにWindowsとmacOSを同居させる場合の注意点'], 'metrics': [{'values': ['300']}]}, {'dimensions': ['/article.php?id=customize-benesse-challenge-touch-to-android', '(not set)'], 'metrics': [{'values': ['200']}]}, {'dimensions': ['/article.php?id=use-analog-fax-with-voip-and-hikaridenwa', '【ひかり電話+VoIPアダプタ】LANしか通ってない環境でアナログ電話とFAXを使う'], 'metrics': [{'values': ['100']}]}, {'dimensions': ['/article.php?id=no-longer-provided-by-xcode', '【macOS Catalina】command line tools are no longer provided by Xcodeと言われた場合'], 'metrics': [{'values': ['50']}]}, {'dimensions': ['/article.php?id=swiftui-voice-to-text', '【Swift UI】マイク使用許可を得て音声をテキストに変換する(音声認識)'],'metrics': [{'values': ['30']}]} ], 'totals': [{'values': ['1580']}], 'rowCount': 8, 'minimums': [{'values': ['30']}], 'maximums': [{'values': ['500']}]}}]}
ページタイトル、URL、アクセス数、アクセス数トータル、最低アクセス数、最高アクセス数などのサマリーデータなどもJSONで返る。
あとはこのデータをもとに自身のホームページHTMLをPythonで差し替えるなど、好きに調理しましょう。
5、各種エラー対策
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(header + ': ' + dimension)?
などと出た場合、公式サンプルのprint文と異なるからかと。以下のように修正
print( header + ': ' + dimension) print ('Date range: ' + str(i)) print( metricHeader.get('name') + ': ' + value)
ModuleNotFoundError: No module named 'oauth2client'
などと出た場合、インストール忘れかと
pip3.6 install --upgrade oauth2client --user
googleapiclient.errors.HttpError: <httperror when requesting https: returned reporting api has not been used in project nnnnnnnnnnnn before or it is disabled. enable by visiting then retry. if you enabled this recently wait a few minutes for the action to propagate our systems and details: developers console activation> </httperror>
などと出た場合、Reporting APIの有効化忘れかと。上記、言われた通りのURLをクリックして、Google Analytics Reporting APIを有効化する。以下のようになってるか確認。
名前 Google Analytics Reporting API 提供者: Google サービス名 analyticsreporting.googleapis.com 概要 Accesses Analytics report data. 有効化のステータス 有効
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Windows版Google Driveが使用中と言われアンインストールできない場合
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Linux】iconv/libiconvをソースコードからインストール
Ubuntu Server 21.10でイーサリアムブロックチェーン【その5】