我使用Core Reporting API v4获取Google Analytics数据。对于给定的Dimensions&组合,我能够捕获最多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);
我们如何在一次运行中启用多个请求,具体取决于可以获得的搜索结果的数量。
例如:如果我的查询可以返回35,000条记录,那么应该有4条内部管理的请求(10,000,10,000,10,000和3,500)。
请仔细研究并为我提供一些指导。在此先感谢。
答案 0 :(得分:3)
Analytics Core Reporting API每次最多返回10,000行 请求,无论你要求多少。
如果您所做的请求将生成超过10000行,那么您可以请求其他行。第一个请求返回的响应将包含一个名为nextPageToken的参数,您可以使用该参数来请求下一组数据。
你将不得不在Java库中挖掘有关如何执行此操作的唯一文档,我发现它是HTTP。
POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
"reportRequests":[
{
...
# Taken from `nextPageToken` of a previous response.
"pageToken": "XDkjaf98234xklj234",
"pageSize": "10000",
}]
}
答案 1 :(得分:1)
这是一个稳定且经过广泛测试的Java解决方案。它是一个递归解决方案,存储每10000个结果批处理(如果有的话)并回忆自己,直到找到null 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;
}
答案 2 :(得分:1)
var reportRequest = new ReportRequest
{
DateRanges = new List<DateRange> { dateRange },
Dimensions = new List<Dimension> { date, UserId, DeviceCategory},
Metrics = new List<Metric> { sessions },
ViewId = view,
PageSize = 400000
};