代码之家  ›  专栏  ›  技术社区  ›  Luc

Google Analytics with Python仅显示最后一个维度

  •  0
  • Luc  · 技术社区  · 7 年前

    所以我使用的是 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都是新手,所以如果这是一个不需要思考的问题,我很抱歉。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   Luc    7 年前

    这是我的间距错误。不习惯使用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)