2016-07-13 6 views
1

こんにちは。私はGoogleアナリティクスのレポートapi v4を使用しています。私のjava.lはディメンションとディメンションの対応するメトリックを取得しようとしています。しかし、私は次元値のメトリック値を常に取得しているだけnull.Belowを返す私のコードです。Googleアナリティクスapiでメジャーリターンを常にnullにしています

public static void main(String[] args) { 
    try { 
     AnalyticsReporting service = initializeAnalyticsReporting(); 

     GetReportsResponse response = getReport(service); 
     printResponse(response); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
private static AnalyticsReporting initializeAnalyticsReporting() throws GeneralSecurityException, IOException { 

    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
    GoogleCredential credential = new GoogleCredential.Builder() 
     .setTransport(httpTransport) 
     .setJsonFactory(JSON_FACTORY) 
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
     .setServiceAccountPrivateKeyFromP12File(new File(KEY_FILE_LOCATION)) 
     .setServiceAccountScopes(AnalyticsReportingScopes.all()) 
     .build(); 

    // Construct the Analytics Reporting service object. 
    return new AnalyticsReporting.Builder(httpTransport, JSON_FACTORY, credential) 
     .setApplicationName(APPLICATION_NAME).build(); 
    } 
private static GetReportsResponse getReport(AnalyticsReporting service) throws IOException { 
    // Create the DateRange object. 

DateRange dateRange = new DateRange(); 
    dateRange.setStartDate("2016-07-11"); 
    dateRange.setEndDate("today"); 

    Dimension sessionDurationBucket= new Dimension().setName("ga:sessionDurationBucket"); 

    Metric sessions = new Metric().setExpression("ga:sessions").setAlias("sessions"); 






    ReportRequest request = new ReportRequest().setViewId(VIEW_ID).setDateRanges(Arrays.asList(dateRange)).setDimensions(Arrays.asList(sessionDurationBucket)).setMetrics(Arrays.asList(sessions)); 

    ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>(); 
    requests.add(request); 

    // Create the GetReportsRequest object. 
    GetReportsRequest getReport = new GetReportsRequest() 
     .setReportRequests(requests); 

    // Call the batchGet method. 
    GetReportsResponse response = service.reports().batchGet(getReport).execute(); 

    // Return the response. 
    return response; 
    } 
private static void printResponse(GetReportsResponse response) { 

    for (Report report: response.getReports()) { 
     ColumnHeader header = report.getColumnHeader(); 
     List<String> dimensionHeaders = header.getDimensions(); 
     List<MetricHeaderEntry> metricHeaders = header.getMetricHeader().getMetricHeaderEntries(); 
     List<ReportRow> rows = report.getData().getRows(); 

     if (rows == null) { 
     System.out.println("No data found for " + VIEW_ID); 
     return; 
     } 

     for (ReportRow row: rows) { 
     List<String> dimensions = row.getDimensions(); 
     List<DateRangeValues> metrics = row.getMetrics(); 
     for (int i = 0; i < dimensionHeaders.size() && i < dimensions.size(); i++) { 
      System.out.println(dimensionHeaders.get(i) + ": " + dimensions.get(i)); 
     } 

     for (int j = 0; j < metrics.size(); j++) { 
      System.out.print("Date Range (" + j + "): "); 
      DateRangeValues values = metrics.get(j); 
      for (int k = 0; k < values.size() && k < metricHeaders.size(); k++) { 
      System.out.println(metricHeaders.get(k).getName() + ": " + values.get(k)); 
      } 
     } 
     } 
    } 
    } 
} 


Sample output: 
ga:sessionDurationBucket: 64 
Date Range (0): sessions: null 
ga:sessionDurationBucket: 708 
Date Range (0): sessions: null 
ga:sessionDurationBucket: 86 
Date Range (0): sessions: null 
ga:sessionDurationBucket: 891 
Date Range (0): sessions: null 

答えて

0

メトリック値を通してあなたループしながら、あなたのコードに若干のバグがあります:

for (ReportRow row: rows) { 
    List<String> dimensions = row.getDimensions(); 
    List<DateRangeValues> metrics = row.getMetrics(); 
    for (int i = 0; i < dimensionHeaders.size() && i < dimensions.size(); i++) { 
     System.out.println(dimensionHeaders.get(i) + ": " + dimensions.get(i)); 
    } 

    for (int j = 0; j < metrics.size(); j++) { 
     System.out.print("Date Range (" + j + "): "); 
     DateRangeValues values = metrics.get(j); 
     for (int k = 0; k < values.getValues().size() && k < metricHeaders.size(); k++) { 
     System.out.println(metricHeaders.get(k).getName() + ": " + values.getValues().get(k)); 
     } 
    } 
    } 

foreachのDateRangeValueは、あなたが実際の値を取得するために.getValues()を呼び出す必要があります。詳細は、Sample documentationおよびReference docsを参照してください。

+0

ありがとうございました。今働いた:) –

関連する問題