4

我正在使用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); 

我们如何根据可以获得的搜索结果的数量在一次运行中启用多个请求。

例如:如果我的查询可以返回 35,000 条记录,那么应该有 4 个请求(10,000,10,000、10,000 和 3,500)在内部进行管理。

请对此进行调查并为我提供一些指导。提前致谢。

4

3 回答 3

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",
  }]
}
于 2016-06-27T11:20:07.353 回答
2

这是一个稳定且经过广泛测试的 Java 解决方案。它是一种递归解决方案,存储每 10000 个结果批次(如果有)并自行调用,直到找到一个空的 nextToken。在这个特定的解决方案中,每 10000 个结果批次都保存到 csv 中,然后执行递归调用!请注意,第一次从外部某处调用此函数时,nextPageToken 也为空!专注于递归原理和空值检查!

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; 
} 
于 2016-06-28T10:13:05.383 回答
0
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
};
于 2018-08-22T15:39:41.967 回答