2016-04-18 18 views
2

JavaScriptコードからAnalyticsデータにアクセスしようとしています。しかし、次のコードが実行され、 エラー:AnalyticsレポートAPI V4はプロジェクトで使用されていません

package com.test.googleapi; 

import java.io.File; 
import java.io.FileInputStream; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.json.JsonFactory; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.services.analyticsreporting.v4.AnalyticsReporting; 
import com.google.api.services.analyticsreporting.v4.model.DateRange; 
import com.google.api.services.analyticsreporting.v4.model.Dimension; 
import com.google.api.services.analyticsreporting.v4.model.GetReportsRequest; 
import com.google.api.services.analyticsreporting.v4.model.GetReportsResponse; 
import com.google.api.services.analyticsreporting.v4.model.Metric; 
import com.google.api.services.analyticsreporting.v4.model.ReportRequest; 

public class AnalyticsApiTest { 
    public static void main(String[] args) throws Exception { 
     GoogleCredential credential = GoogleCredential 
       .fromStream(new FileInputStream(new File("assets/client-secrets/service-account-key.json"))) 
       .createScoped(Collections.singleton("https://www.googleapis.com/auth/analytics.readonly")); 
     HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
     JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 
     AnalyticsReporting analyticsReporting = new AnalyticsReporting.Builder(httpTransport, jsonFactory, credential) 
       .setApplicationName("Test") 
       .build(); 

     DateRange dateRange = new DateRange(); 
     dateRange.setStartDate("2015-06-15"); 
     dateRange.setEndDate("2015-06-30"); 

     // Create the Metrics object. 
     Metric sessions = new Metric() 
      .setExpression("ga:sessions") 
      .setAlias("sessions"); 

     //Create the Dimensions object. 
     Dimension browser = new Dimension() 
      .setName("ga:browser"); 

     // Create the ReportRequest object. 
     ReportRequest request = new ReportRequest() 
      .setViewId("XXXX") 
      .setDateRanges(Arrays.asList(dateRange)) 
      .setDimensions(Arrays.asList(browser)) 
      .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 = analyticsReporting.reports().batchGet(getReport).execute(); 

    } 
} 

私は次のエラーを取得する:

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden 
{ 
    "code" : 403, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Analytics Reporting API V4 has not been used in project analytics-test-1279 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/analyticsreporting.googleapis.com/overview?project=analytics-test-1279 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.", 
    "reason" : "forbidden" 
    } ], 
    "message" : "Analytics Reporting API V4 has not been used in project analytics-test-1279 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/analyticsreporting.googleapis.com/overview?project=analytics-test-1279 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.", 
    "status" : "PERMISSION_DENIED" 
} 
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
    at com.test.googleapi.AnalyticsApiTest.main(AnalyticsApiTest.java:73) 

私はすでにセットアップにanalytics-test-1279プロジェクトでサービスアカウントキーを持っています。 Analytics APIも有効です。

The Analytics API is enabled

私はまさにここでの問題であるかを把握できませんでした。

答えて

1

エラーメッセージに記載されているとおり、Analytics Reporting APIを有効にする必要があります。彼らは簡単に同じページにエラーの直接リンクをあなたに提供しました。

あなたのスクリーンショットからAnalytics APIを有効にしました。これにはManagement API V3と古いCore Reporting API V3が含まれています。

Analytics Reporting API V4のリリースでは、完全に新しいAPIを有効にする必要があります。残念ながら、authorizeは同じスコープを使用しているため、ユーザーがアプリケーションを再認証する必要はありません。

+0

「Analytics Reporting API V4」を入手する前に、「Analytics」という用語を検索ボックスに入力する必要がありました。これを有効にすると、この問題は解決されました。また、データにアクセスするために、Analyticsアカウント管理者にサービスアカウントのメールを追加する必要がありました。 – Kenpachi

関連する問題