Python Google Analitycs - как получить данные с несколькими viewid? - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу загрузить данные за несколько 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.

В случае с каждым днем ​​я терпел неудачу

...