для API, который я использую, нам нужно иметь возможность просматривать, какие конкретные страницы нажимаются, и выводить их в файл CSV. Я могу видеть среднюю продолжительность сеанса и количество просмотров страниц. Мне любопытно, что мне нужно добавить в мой код, прилагаемый ниже, чтобы убедиться, что это возможно для экспорта в файл CSV. Спасибо!
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = 'client_secrets.json'
VIEW_ID ='insert here'
credentials = ServiceAccountCredentials.from_json_keyfile_name(KEY_FILE_LOCATION, SCOPES)
# Build the service object.
analytics = build('analyticsreporting', 'v4', credentials=credentials)
response = analytics.reports().batchGet(body = {
'reportRequests': [{
'viewId': VIEW_ID,
'dateRanges': [{'startDate': '30daysAgo', 'endDate': 'today'}],
'metrics': [
{"expression": "ga:pageviews"},
{"expression": "ga:avgSessionDuration"}
], "dimensions": [
{"name": "ga:deviceCategory"}
]
}]}).execute()
отклик
{'reports': [{'columnHeader': {'dimensions': ['ga:deviceCategory'], 'metricHeader': {'metricHeaderEntries': [{'name': 'ga:pageviews', 'type': 'INTEGER'}, {'name': 'ga:avgSessionDuration', 'type': 'TIME'}]}}, 'data': {'isDataGolden': True, 'maximums': [{'values': ['485', '94.95454545454545']}], 'minimums': [{'values': ['29', '51.21186440677966']}], 'rowCount': 3, 'rows': [{'dimensions': ['desktop'], 'metrics': [{'values': ['485', '51.21186440677966']}]}, {'dimensions': ['mobile'], 'metrics': [{'values': ['409', '69.30859375']}]}, {'dimensions': ['tablet'], 'metrics': [{'values': ['29', '94.95454545454545']}]}], 'totals': [{'values': ['923', '60.06487341772152']}]}}]}
import pandas as pd
df = pd.DataFrame(columns=['Name', 'Age'])
def ga_response_dataframe(response):
row_list = []
# Get each collected report
for report in response.get('reports', []):
# Set column headers
column_header = report.get('columnHeader', {})
dimension_headers = column_header.get('dimensions', [])
metric_headers = column_header.get('metricHeader', {}).get('metricHeaderEntries', [])
# Get each row in the report
for row in report.get('data', {}).get('rows', []):
# create dict for each row
row_dict = {}
dimensions = row.get('dimensions', [])
date_range_values = row.get('metrics', [])
# Fill dict with dimension header (key) and dimension value (value)
for header, dimension in zip(dimension_headers, dimensions):
row_dict[header] = dimension
# Fill dict with metric header (key) and metric value (value)
for i, values in enumerate(date_range_values):
for metric, value in zip(metric_headers, values.get('values')):
# Set int as int, float a float
if ',' in value or '.' in value:
row_dict[metric.get('name')] = float(value)
else:
row_dict[metric.get('name')] = int(value)
row_list.append(row_dict)
df = row_list
return df
df = ga_response_dataframe(response)
#df = pd.DataFrame(row_list)
print(df)
Отвечает ли это на ваш вопрос? Python конвертирует JSON в CSV






API возвращает данные в формате Json, если вы хотите сохранить его как CSV, вам придется проанализировать его.