使用 java 的 google 分析 api 中的指标 return 始终为空

Metric return always null in google analytics api using java

您好,我正在为我的 java.I 使用 google 分析报告 api v4,我正在尝试获取维度和维度的相应指标。但我只得到维度值度量值总是返回 null.Below 是我的代码。

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

循环访问指标值时,您的代码中存在一个小错误:

  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 and the Reference docs