【问题标题】:Google Analytics Reporting API v4: nextPagetoken cannot go beyond 10,000 rows (Python)Google Analytics Reporting API v4:nextPagetoken 不能超过 10,000 行(Python)
【发布时间】:2020-05-14 20:01:18
【问题描述】:

我是 Google 分析 API 的新手,我正在尝试使用 Python 查询超过 10,000 行的数据。我请求中的每一行都是一个客户 ID。经过一番研究,我知道我必须指定 pageToken 和 pagessize 参数才能实现这个目标。以下函数显示了我的基本查询结构。

def get_report(analytics, pageToken=None):
    sample_request = {
      'viewId': '1111111',
      'pageSize': 2000,
      'pageToken': pageToken,
      'dateRanges': {
          'startDate': datetime.strftime(datetime.now() - timedelta(days = 30),'%Y-%m-%d'),
          'endDate': datetime.strftime(datetime.now(),'%Y-%m-%d')
      },
      'dimensions': [{'name': 'ga:clientid'}],
      #'metrics': [{'expression': 'ga:sessions'}, {'expression': 'ga:avgSessionDuration'}]
      'metrics': [{'expression': 'ga:sessions'}, 
                  {'expression': 'ga:avgSessionDuration'},
                  {'expression': 'ga:bounceRate'},
                  {'expression': 'ga:goalConversionRateAll'},
                  {'expression': 'ga:pageviews'}
                 ],
    'orderBys':  [{"fieldName": "ga:sessions", "sortOrder": "DESCENDING"}],
        #{"fieldName": "ga:pageviews", "sortOrder": "DESCENDING"}],


    }

    return analytics.reports().batchGet(
      body={
        'reportRequests': sample_request,

      }
    ).execute()

我使用这篇文章中出现的类似想法实现了我的分页功能 Update the input of a loop with a result from the previous iteration of the loop 。基本上我每次查询 2000 行并将这些行转换为数据框。虽然我可以从先前的请求中接收 pageToken,但我会根据 pageToken 继续请求额外的 2000 行,并将它们附加到我现有的数据帧中。这是我的分页代码。

# pagination
def main():
    global result

    # Initial request
    analytics = initialize_analyticsreporting()
    response = get_report(analytics)
    pageToken = response['reports'][0].get('nextPageToken')
    response_data = response.get('reports', [])[0]
    # convert the report into pandas dataframe
    result= pd.DataFrame(prase_response(response_data)[0])


    while pageToken != None:   # more data available

        print(pageToken)
        print("still running")
        analytics = initialize_analyticsreporting()
        response = get_report(analytics, str(int(pageToken)+1))
        pageToken = response['reports'][0].get('nextPageToken') # update the pageToken
        response_data = response.get('reports', [])[0]
        # temp is new dataframe to be apended 
        temp= pd.DataFrame(prase_response(response_data)[0])

        result= pd.concat([result,temp], axis=0)


if __name__ == '__main__':
    main()

该程序按预期工作,但当 pageToken 达到“10000”时它将停止;也就是说,在这种情况下,主函数可以将 5 个数据帧连接在一起,每个数据帧有 2000 行。我应该有超过 60,000 行可用。我知道我们可以为每个请求最多请求 10,000 行,但我也知道我们可以使用 pageToken 参数绕过这个限制。我不确定我的代码的哪一部分出错了。如果我设置 pageSize=10,000,那么主函数将只创建一个包含 10,000 行的数据框并停止。

那么我怎样才能获得所有 60,000 行数据以及为什么我的分页功能失败。或者请求超过 10,000 个客户端 ID 是不可能的?任何帮助是极大的赞赏!谢谢!

更新(2020 年 5 月 15 日):我将分页功能用于其他维度,例如“ga:pagePath”,效果很好。所以我想只查询超过 10,000 行的客户端 ID 可能是不可能的。如果我错了,请纠正我。

【问题讨论】:

  • 我也有同样的问题。恐怕它与python库无关。我在此页面developers.google.com/analytics/devguides/reporting/core/v4/… 上尝试了 api explorer,但遇到了同样的问题。我想我会使用 BigQuery 作为解决方法。
  • 与clientid维度的限制有关。如果您将 clientid 维度更改为另一个维度,我很确定它会按预期工作。
  • 是的,我也检查过。您可能需要报告此错误。

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


【解决方案1】:

我认为这是权限或配置问题。我有两个不同的帐户,其中一个我可以拿回所有的东西,而另一个只有 10000。回报少的那个最糟糕的是一个 360 帐户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多