naritoブログ

【お知らせ】
新ブログができました。今後そちらで更新し、このサイトは更新されません(ウェブサイト自体は残しておきます)
このブログの内容に関してコメントしたい場合は、新ブログのフリースペースに書き込んでください

このブログの内容を新ブログに移行中です。このブログで見つからない記事は、新ブログにありま

Pythonで、グーグルアナリティクスから人気ページを取得する

約1172日前 2017年5月30日13:25
プログラミング関連
Django Python
今回はGoogle AnalyticsのAPIを利用し、自分のサイト(アナリティクス設置済みの!)の人気ページを取得します。

基本的には以下のクイックスタートのとおりに進めていきます。
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py

まずは以下のURLへ行き、APIを有効化しましょう。
https://console.developers.google.com/start/api?id=analyticsreporting.googleapis.com&credential=client_key

「続行」を押します。


「認証情報に進む」を押します。



「必要な認証情報」ボタンを押さずに、ちょっと上にある「サービスアカウント」のリンクをクリック。



「サービスアカウントを作成」ボタンを押します。



「サービスアカウント名」に、適当にいれます。
そして下に表示される「サービスアカウントID」をコピーしておきましょう。
「新しい秘密鍵の提供」にチェックし、P12にチェック、そして「作成」押下です。


p12ファイルがダウンロードされるので、「client_secrets.p12」にリネームしておきます。
名前は別にほかの名前でもいいです。飼ってる犬の名前とか。

ここで「秘密鍵のパスワード」がどうたら言われますが、今回は使わず、しったこっちゃありません。


アナリティクスを開きましょう。左下の「管理」を押します。



右側のビュー、「ユーザー管理」を押します。



ここに、先程コピーした「サービスアカウントID」を入れ、「表示と分析」になっているか確認し、「追加」を押下します。
これで準備おっけーです。



以下のようにして、必要なライブラリをインストール

pip install google-api-python-client
pip install pyopenssl


VIEW_IDは、以下のURLから確認してください。
アナリティクスの画面から確認もできるので、好きなほうで確認しましょう。
(アナリティクス→管理→「ユーザー管理」の上、「ビュー設定」でも確認できます。)
https://ga-dev-tools.appspot.com/account-explorer/

以下のようなスクリプトを作成し、client_secrets.p12も同じ階層においてください。
公式チュートリアルでは指定されたビューの過去 7 日間のセッション数が出力されますが、それじゃあ面白くないので変更しています。
過去7日間の間での、ページビューが多い順に10件出力されます。

"""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

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
KEY_FILE_LOCATION = os.path.join(BASE_DIR, 'client_secrets.p12')
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
DISCOVERY_URI = ('https://analyticsreporting.googleapis.com/$discovery/rest')

# この2つをかきかえてね
SERVICE_ACCOUNT_EMAIL = 'サービスアカウントID'
VIEW_ID = 'ビューID'


def initialize_analyticsreporting():
"""Initializes an analyticsreporting service object.

Returns: analytics an authorized analyticsreporting service
object.

"""

credentials = ServiceAccountCredentials.from_p12_keyfile(
SERVICE_ACCOUNT_EMAIL, KEY_FILE_LOCATION, scopes=SCOPES)

http = credentials.authorize(httplib2.Http())

# Build the service object.
analytics = build('analytics', 'v4', http=http,
discoveryServiceUrl=DISCOVERY_URI)

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)


def main():

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


if __name__ == '__main__':
main()


私のブログだと、実行すると以下のような出力です。
/が174でトップでした。

{'dimensions': ['/', 'naritoブログ'], 'metrics': [{'values': ['174']}]}
{'dimensions': ['/detail/164/', 'Bootstrap、余白について - naritoブログ'], 'metrics': [{'values': ['147']}]}
{'dimensions': ['/detail/119/', 'Pythonで進捗バーを表示する(tqdm) - naritoブログ'], 'metrics': [{'values': ['118']}]}
{'dimensions': ['/detail/264/', 'Python、Seleniumの基本 - naritoブログ'], 'metrics': [{'values': ['95']}]}
{'dimensions': ['/detail/172/', 'Bootstrapで、navbarの色をカスタマイズ - naritoブログ'], 'metrics': [{'values': ['79']}]}
{'dimensions': ['/detail/155/', 'Windowsに、Sublime Text3でPython開発環境を構築 - naritoブログ'], 'metrics': [{'values': ['77']}]}
{'dimensions': ['/detail/268/', 'Python、shutilでファイル、ディレクトリ操作 - naritoブログ'], 'metrics': [{'values': ['71']}]}
{'dimensions': ['/detail/169/', 'Apacheで、キャッシュをさせない設定 - naritoブログ'], 'metrics': [{'values': ['70']}]}
{'dimensions': ['/detail/186/', 'Bootstrapで、要素を下に寄せる - naritoブログ'], 'metrics': [{'values': ['65']}]}
{'dimensions': ['/detail/161/', 'Python、requestsを使ったダウンロード - naritoブログ'], 'metrics': [{'values': ['63']}]}


URL、タイトル、PV数をピンポイントで取得したいならば以下のように取得します。

for row in rows:
url = row['dimensions'][0]
title = row['dimensions'][1]
page_view = row['metrics'][0]['values'][0]


レポートを作成しているのは以下の部分です。

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()


これは、10個表示するという意味です。消すと全部表示されます。

'pageSize': 10,


これは日付の範囲ですね。7日前から開始で、今日までの1週間です。

'dateRanges': [
{'startDate': '7daysAgo', 'endDate': 'today'}
],


ページビューを意味しています。
"ga:sessions"だとセッション数になります。

'metrics': [
{'expression': 'ga:pageviews'},
],


ページパスと、ページタイトルです。

'dimensions': [
{'name': 'ga:pagePath'}, {'name': 'ga:pageTitle'}
],


これが並び替えの部分ですね。
ページビューで並び替え、DESC(降順)です。

'orderBys': [
{'fieldName': 'ga:pageviews', 'sortOrder': 'DESCENDING'},
]


以下のページでもっと詳しい内容が確認できます。
https://developers.google.com/analytics/devguides/reporting/core/v4/basics?hl=ja