4

Core Reporting API v4を使用して Google アナリティクス データを取得しています。ディメンションと指標の特定の組み合わせについて、最大 10,000 レコードをキャプチャできます。私の質問は、クエリが 10,000 を超える検索結果を生成できる場合、それらすべてのレコードを取得するにはどうすればよいですか? ドキュメントを調べたところ、ReportRequest オブジェクトのプロパティを設定しても、1 回のリクエストで 10,000 を超えるレコードにアクセスできないことがわかりました。

ReportRequest request = new ReportRequest()
    .setDateRanges(Arrays.asList(dateRange)) 
    .setViewId(VIEW_ID)
    .setDimensions(Arrays.asList(dimension))
    .setMetrics(Arrays.asList(metric))
    .setPageSize(10000); 

取得できる検索結果の数に応じて、1 回の実行で複数の要求を有効にするにはどうすればよいでしょうか。

例: 私のクエリが 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 件の結果バッチ (存在する場合) ごとに格納し、null の nextToken が見つかるまで自分自身を呼び出す再帰的なソリューションです。この特定のソリューションでは、10000 件の結果バッチごとに csv に保存され、再帰呼び出しが実行されます。この関数が外部のどこかから初めて呼び出されたとき、nextPageToken も null であることに注意してください!! 再帰的根拠と 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; 
} 
于 2016-06-28T10:13:05.383 に答える