I'm trying to create a nicely formatted csv file with Python from a Google Analytics Reporting API V4 request results.
The setup is using the provided example "Hello Analytics Reporting API V4." https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py#3_setup_the_sample
The following results are as expected:
ga:date: 20160601
ga:sessions: 19802
ga:pageviews: 53369
ga:users: 17656
ga:date: 20160602
ga:sessions: 33718
ga:pageviews: 71857
ga:users: 30266
What is needed would be something like this:
ga:date: ga:sessions: ga:pageviews: ga:users:
20160601 19802 53369 17656
20160602 33718 71857 30266
I'm sure there is a straightforward solution with Python for this one.
Here's how I did it. For my application get_report_response() and save_report_data()
is being called from within a loop that is going through multiple profile ids.
report_response = get_report_response(report_request, feed_log_file_path)
save_report_data(report_response, profile_id, feed_data_file_path)
def get_report_response(report_request, feed_log_file_path):
report_response = _analytics_reporting_service.reports().batchGet(body=report_request,quotaUser=QUOTA_USER,prettyPrint=True).execute()
Log("report response: {0}".format(report_response), log_file_path=feed_log_file_path)
return report_response
def save_report_data(results, profile_id, feed_data_file_path):
"""Prints out the results. """
for report in results.get('reports', []):
create_header = True
if os.path.isfile(feed_data_file_path):
create_header = False
f = open(feed_data_file_path, 'at', encoding='utf-8')
writer = csv.writer(f, lineterminator='\n')
columnHeader = report.get('columnHeader', {})
dimensionHeaders = columnHeader.get('dimensions', [])
metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
rows = report.get('data', {}).get('rows', [])
temp_header_row = ["profile_id"]
header_row = []
header_row.extend(dimensionHeaders)
header_row.extend([mh['name'] for mh in metricHeaders])
temp_header_row.extend(header_row)
if create_header:
writer.writerow(temp_header_row)
for row in rows:
dimensions_data = row.get('dimensions', [])
metrics_data = [m['values'] for m in row.get('metrics', [])][0]
temp_data_row = [profile_id]
data_row = []
data_row.extend(dimensions_data)
data_row.extend(metrics_data)
temp_data_row.extend(data_row)
writer.writerow(temp_data_row)
# Close the file.
f.close()
Below my solution
def print_response_to_csv(response, SEP="\t"):
for report in response.get('reports', []):
columnHeader = report.get('columnHeader', {})
dimensionHeaders = columnHeader.get('dimensions', [])
metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
metricHeaders = list(map(lambda x: x.get('name'), metricHeaders))
header = SEP.join(dimensionHeaders) + SEP + SEP.join(metricHeaders)
print(header)
for row in report.get('data', {}).get('rows', []):
dimensions = row.get('dimensions', [])
dateRangeValues = row.get('metrics', [])
output = SEP.join(dimensions)
for i, values in enumerate(dateRangeValues):
for metricHeader, value in zip(metricHeaders, values.get('values')):
output = output + SEP + value
print(output)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.