Bal*_*esh 5 java google-analytics-api google-reporting-api
我正在使用Core Reporting API v4获取 Google Analytics 数据。对于给定的维度和指标组合,我最多能够捕获 10,000 条记录。我的问题是,如果我的查询可以产生超过 10,000 个搜索结果,那么我如何获取所有这些记录?我浏览了文档,发现在单个请求中,我们无法通过设置 ReportRequest 对象的属性来访问超过 10,000 条记录。
ReportRequest request = new ReportRequest()
.setDateRanges(Arrays.asList(dateRange))
.setViewId(VIEW_ID)
.setDimensions(Arrays.asList(dimension))
.setMetrics(Arrays.asList(metric))
.setPageSize(10000);
Run Code Online (Sandbox Code Playgroud)
我们如何根据可以获得的搜索结果的数量在一次运行中启用多个请求。
例如:如果我的查询可以返回 35,000 条记录,那么应该有 4 个请求(10,000,10,000, 10,000 和 3,500)在内部管理。
请调查这一点并为我提供一些指导。提前致谢。
这是一个稳定且经过广泛测试的 Java 解决方案。它是一种递归解决方案,每 10000 个结果批次(如果有)存储并调用自身,直到找到空的 nextToken。在此特定解决方案中,每 10000 个结果批次都会保存到 csv 中,然后执行递归调用!请注意,第一次从外部调用此函数时,nextPageToken 也为 null!重点关注递归原理和空值检查!
private static int getComplexReport(AnalyticsReporting service,int
reportIndex,java.lang.String startDate,String endDate,ArrayList<String>
metricNames,ArrayList<String> dimensionNames,String pageToken)
throws IOException
ReportRequest req = createComplexRequest(startDate,endDate,metricNames,dimensionNames,pageToken);
ArrayList<ReportRequest> requests = new ArrayList<>();
requests.add(req);
// Create the GetReportsRequest object.
GetReportsRequest getReport = new GetReportsRequest()
.setReportRequests(requests);
// Call the batchGet method.
GetReportsResponse response = service.reports().batchGet(getReport).execute();
//printResponse(response);
saveBatchToCsvFile("dummy_"+startDate+"_"+endDate+"_"+Integer.toString(reportIndex)+".csv",startDate+"_"+endDate,response,metricNames,dimensionNames);
String nextToken = response.getReports().get(0).getNextPageToken();
//System.out.println(nextToken);
if(nextToken!=null)
return getComplexReport(service,reportIndex+1,"2016-06-21","2016-06-21",metricNames,dimensionNames,nextToken);
return reportIndex;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3898 次 |
| 最近记录: |