Я хочу загрузить данные за несколько view_id и данные за несколько лет.
У меня работает базовая версия c, т.е. одна кампания, короткий диапазон дат (от 1 до 2 дней)
Ниже приведен код, который я использую:
from apiclient.discovery import build
import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools
import pandas as pd
import numpy as np
import datetime
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
DISCOVERY_URI = 'https://analyticsreporting.googleapis.com/$discovery/rest'
CLIENT_SECRETS_PATH = 'client_secret.json'
VIEW_ID = '0000000001'
def authenticate_ga_api():
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[tools.argparser])
flags = parser.parse_args([])
flow = client.flow_from_clientsecrets(
CLIENT_SECRETS_PATH, scope=SCOPES,
message=tools.message_if_missing(CLIENT_SECRETS_PATH))
storage = file.Storage('analytics.dat')
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = tools.run_flow(flow, storage, flags)
http = credentials.authorize(http=httplib2.Http())
analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI)
return analytics
ga_auth = authenticate_ga_api()
requests_list = [{
'viewId': i,
"pageSize": "10000",
'dateRanges': [
{'startDate': StartDate, 'endDate': EndDate}],
'dimensions': [{'name': name} for name in DIMS]
'metrics': [{'expression': exp} for exp in METRICS]
}]
data = ga_auth.reports().batchGet(body={'reportRequests':requests_list }).execute()
DIMS = ['ga:date','ga:source','ga:medium']
METRICS = ['ga:sessions', 'ga:newUsers', ]
StartDate = '2020-01-01'
EndDate = '2020-01-31'
def data_process(data):
data_dic = {f"{i}": [] for i in DIMS + METRICS}
for report in data.get('reports', []):
rows = report.get('data', {}).get('rows', [])
for row in rows:
for i, key in enumerate(DIMS):
data_dic[key].append(row.get('dimensions', [])[i])
dateRangeValues = row.get('metrics', [])
for values in dateRangeValues:
all_values = values.get('values', [])
for i, key in enumerate(METRICS):
data_dic[key].append(all_values[i])
return data_dic
data_dic = data_process(data)
df = pd.DataFrame(data=data_dic)
df.columns = [col.split(':')[-1] for col in df.columns]
df['View_id'] = VIEW_ID
df
Я хотел бы загружать данные для нескольких VIEW_ID и изо дня в день. Мои знания о python все еще немного малы.
Может кто-нибудь дать мне подсказку, как сделать это для 2 циклов после view_id и день за днем?
при условии VIEW_ID = [ '0000000001', '0000000002', '0000000003'] и дата + 1 день
Я пробовал несколько способов, но в некоторых случаях только циклы для разных View_ID показывали 1 запись из каждого view_id.
В случае с каждым днем я терпел неудачу