【问题标题】:Google Analytics with Python only shows the last dimension使用 Python 的 Google Analytics(分析)仅显示最后一个维度
【发布时间】:2018-09-03 02:33:02
【问题描述】:

所以我使用了Hello Analytics python 脚本的稍微修改过的版本。

唯一的区别是我在指标中有更多“表达式”,并且我正在尝试添加一个维度。一切正常,除非我在最后一个 for 循环中打印出所有内容,它只显示最后一个维度。

因此,我没有得到包含指标的所有维度的列表,而是只得到最后一个。

ga:city: Ho Chi Minh City
ga:users: 19
ga:newUsers: 19
ga:sessionsPerUser: 1.263157894736842
ga:sessions: 24
ga:bounces: 18
ga:bounceRate: 75.0
ga:avgSessionDuration: 40.708333333333336

这是代码示例

"""Hello Analytics Reporting API V4."""

import argparse

from apiclient.discovery import build
import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
DISCOVERY_URI = ('https://analyticsreporting.googleapis.com/$discovery/rest')
CLIENT_SECRETS_PATH = 'client_secrets.json' # Path to client_secrets.json file.
VIEW_ID = '170823765'


def initialize_analyticsreporting():
  """Initializes the analyticsreporting service object.

  Returns:
    analytics an authorized analyticsreporting service object.
  """
  # Parse command-line arguments.
  parser = argparse.ArgumentParser(
      formatter_class=argparse.RawDescriptionHelpFormatter,
      parents=[tools.argparser])
  flags = parser.parse_args([])

  # Set up a Flow object to be used if we need to authenticate.
  flow = client.flow_from_clientsecrets(
      CLIENT_SECRETS_PATH, scope=SCOPES,
      message=tools.message_if_missing(CLIENT_SECRETS_PATH))

  # Prepare credentials, and authorize HTTP object with them.
  # If the credentials don't exist or are invalid run through the native client
  # flow. The Storage object will ensure that if successful the good
  # credentials will get written back to a file.
  storage = file.Storage('analyticsreporting.dat')
  credentials = storage.get()
  if credentials is None or credentials.invalid:
    credentials = tools.run_flow(flow, storage, flags)
  http = credentials.authorize(http=httplib2.Http())

  # Build the service object.
  analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI)

  return analytics

def get_report(analytics):
    # Use the Analytics Service Object to query the Analytics Reporting API V4.
    return analytics.reports().batchGet(
        body={
            'reportRequests': [
                {
                    'viewId': VIEW_ID,
                    'dateRanges': [{'startDate': '30daysAgo', 'endDate': 'today'}],
                    'metrics': [
                        {'expression': 'ga:users'},
                        {'expression': 'ga:newUsers'},
                        {'expression': 'ga:sessionsPerUser'},
                        {'expression': 'ga:sessions'},
                        {'expression': 'ga:bounces'},
                        {'expression': 'ga:bounceRate'},
                        {'expression': 'ga:avgSessionDuration'},
                    ],
                    "dimensions": [
                        {"name": "ga:city"}
                    ]
                }
            ]
        }
    ).execute()


def print_response(response):
    """Parses and prints the Analytics Reporting API V4 response"""

    for report in response.get('reports', []):

        columnHeader = report.get('columnHeader', {})
        dimensionHeaders = columnHeader.get('dimensions', [])
        metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
        rows = report.get('data', {}).get('rows', [])


        for row in rows:
            dimensions = row.get('dimensions', [])
            dateRangeValues = row.get('metrics', [])

        for header, dimension in zip(dimensionHeaders, dimensions):
            print(header + ': ' + dimension)

        for i, values in enumerate(dateRangeValues):
            for metricHeader, value in zip(metricHeaders, values.get('values')):
                print(metricHeader.get('name') + ': ' + value)


def main():

  analytics = initialize_analyticsreporting()
  response = get_report(analytics)
  print_response(response)

if __name__ == '__main__':
  main()

我是 Google Analytics(分析)和 Python 的新手,所以如果这是一个简单的问题,我深表歉意。

谢谢

【问题讨论】:

    标签: python google-analytics google-api google-oauth google-api-python-client


    【解决方案1】:

    这是我的间距错误。不习惯使用 python 错过了一个事实,即如果它通过结果并将它们打印出来,我应该缩进该部分。

    所以不是

        for row in rows:
            dimensions = row.get('dimensions', [])
            dateRangeValues = row.get('metrics', [])
    
        for header, dimension in zip(dimensionHeaders, dimensions):
            print(header + ': ' + dimension)
    
        for i, values in enumerate(dateRangeValues):
    
            for metricHeader, value in zip(metricHeaders, values.get('values')):
                print(metricHeader.get('name') + ': ' + value)
    

    应该是

     for row in rows:
                dimensions = row.get('dimensions', [])
                dateRangeValues = row.get('metrics', [])
    
                for header, dimension in zip(dimensionHeaders, dimensions):
                    print(header + ': ' + dimension)
    
                for i, values in enumerate(dateRangeValues):
    
                    for metricHeader, value in zip(metricHeaders, values.get('values')):
                        print(metricHeader.get('name') + ': ' + value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多