PythonでGoogle Analyticsから直近30日分のデータを取得してCSVファイルに保存する方法
2020/06/16
前回2回に分けてPythonでGoogle Analyticsからデータを取得する方法について書きました。
今回はこれを応用して直近30日分のPVを収集してそれをCSVファイルに保存する方法について書きます。30日でなくても60日でも90日でもOKですが、個人的にブログの記事PVを30日分のデータで評価しているのでそのようにしているだけです。
こんな感じでCSVファイルが生成されます。URLとタイトル、30日分のPVです。
ソースコードは以下の通り。
8行目のstartDate = '30daysAgo'
の日付を変えれば遡る日数を変えられます。
from apiclient.discovery import build from oauth2client.service_account import ServiceAccountCredentials SCOPES = ['https://www.googleapis.com/auth/analytics.readonly'] KEY_FILE_LOCATION = 'bamboo-reason-XXXXX-XXXXXXXXXXX.json' VIEW_ID = 'XXXXXXXX' startDate = '30daysAgo' #この変数で何日前のデータかを示している endDate = 'today' def initialize_analyticsreporting(): credentials = ServiceAccountCredentials.from_json_keyfile_name( KEY_FILE_LOCATION, SCOPES) analytics = build('analyticsreporting', 'v4', credentials=credentials) return analytics def get_report(analytics): return analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'pageSize': 1000, 'dateRanges': [{'startDate': startDate, 'endDate': endDate}], 'metrics': [{'expression': 'ga:pageviews'}], 'dimensions': [{'name': 'ga:pagePath'}, {'name': 'ga:pageTitle'}], 'orderBys': [{'fieldName': 'ga:pageviews', 'sortOrder': 'DESCENDING'}] }] } ).execute() def print_response(response): result = "" #タイトルの中にブログタイトルが入っているのでそれを消すためのもの delcode = ' | 非IT企業に勤める中年サラリーマンのIT日記' cnt=1 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', []) result += str(cnt) +',' for header, dimension in zip(dimensionHeaders, dimensions): result += dimension.replace(',', '_') + ',' for i, values in enumerate(dateRangeValues): for metricHeader, value in zip(metricHeaders, values.get('values')): result += value + ',' result += "\n" cnt+=1 #ブログタイトル削除 result = result.replace(delcode,'') #CSV保存 f = open('out.csv','w') f.write(result) f.close() def main(): analytics = initialize_analyticsreporting() response = get_report(analytics) print_response(response) if __name__ == '__main__': main()
スポンサーリンク