使用Core Reporting Google API v4(Java)显示超过10000行

时间:2016-06-27 10:55:05

标签: java google-analytics-api google-reporting-api

我使用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)。

请仔细研究并为我提供一些指导。在此先感谢。

3 个答案:

答案 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
};