【发布时间】: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