2016-06-27 3 views
3

Core Reporting API v4を使用してGoogle Analyticsデータを取得しています。 Dimensions & Metricsの特定の組み合わせについて、最大10,000個のレコードをキャプチャできます。 私の質問が10,000を超える検索結果を生み出すことができるなら、どのようにこれらのレコードをすべて取得できますか?私はドキュメントを見て、1回のリクエストでReportRequestオブジェクトのプロパティを設定して10,000以上のレコードにアクセスすることができないことを発見しました。Core Reporting Google API v4(Java)を使用して10000を超える行を表示

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)が必要です。

これを調べていくつかのガイダンスを促進してください。前もって感謝します。

答えて

0

ここでは、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; 
} 
+0

もしあなたが上記のコードの中にいくつかの "論理"を置き、すべての再帰の間に便利なDateのJavaライブラリで遊ぶべきです。 –

+0

コードが本当に助けてくれました。今、私が立ち往生している唯一のことは、次の反復のための 'startDate'です。私はこれを解決するために取り組んでいます。何か提案があれば、それぞれの反復ごとに 'startDate'を変更する方法を教えてください。 –

+0

もう一度!私はあなたを助けてくれてうれしいですが、それがあなたを多く助けてくれたので、私の答えをアップしてください...公正​​であるために。 startDateの問題はどういう意味ですか?複数のdateRangesに対して複数の実行を実行しますか? –

2

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", 
    }] 
} 
+0

リクエストはJavaで返されるはずの実際のレコードの数を知る方法はありますか? –

+0

結果セットの戻り値は、合計行のようになります。私はあなたにJavaのサンプルコードを見つけることができるかどうかを知るために誰かに連絡しました。彼らがこれに答えるかどうかを待たなければならない。 – DaImTo

+1

[ReportData rowCount](https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#ReportData.FIELDS.row_count)をご覧ください。 'response.getReports()[0] .getData()。getRowCount()'。 [参考文献](https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet)は本当に助けになるはずです。そこの各オブジェクトはJavaクライアントライブラリのクラスになり、各フィールドは 'getProperty()'でアクセスできるプロパティになります。 – Matt

関連する問題