Error: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden (Insufficient Permission)

750 views
Skip to first unread message

Madhusudan Dad

unread,
Apr 14, 2015, 8:28:40 AM4/14/15
to google-analytics...@googlegroups.com
I am trying following code to check data retrieval from Google Analytics using OAuth service account authorization. I want to retrieve data from GA and import it into PostgreSql database. I started learning this retrieval and I am working with following code.
My Code is:
 
package com.leader.test;
import com.google.api.client.auth.oauth2.Credential;
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.client.util.store.FileDataStoreFactory;
import com.google.api.services.analytics.Analytics;
import com.google.api.services.analytics.AnalyticsScopes;
import com.google.api.services.analytics.model.GaData;
import com.google.api.services.analytics.model.GaData.ColumnHeaders;
import com.google.api.services.sqladmin.SQLAdmin;
import com.google.api.services.sqladmin.SQLAdminScopes;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
public class ServiceAccountTest1 {
 
  private static final String APPLICATION_NAME = "JasperPlusGoogleAnalytics";
  private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
  private static FileDataStoreFactory dataStoreFactory;
  private static HttpTransport httpTransport;
  private static final String emailAddress = "XXXXX...@developer.gserviceaccount.com";
  private static final String profileId = "ga:XXXXXX";
 
 
  public static void main(String[] args){
    try{
      httpTransport = GoogleNetHttpTransport.newTrustedTransport();
     /*GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(JSON_FACTORY)
      .setServiceAccountId(emailAddress)
      .setServiceAccountPrivateKeyFromP12File(new File("D:\\test\\JasperPlusGoogleAnalytics-140cd2242390.p12"))
      .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
      .build();*/
      GoogleCredential credential =
          new GoogleCredential.Builder().setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(emailAddress)
            .setServiceAccountScopes(Collections.singleton(AnalyticsScopes.ANALYTICS_EDIT))
            .setServiceAccountPrivateKeyFromP12File(new File("D:\\test\\XXXXX.p12"))
            .build();
      Analytics analytics = initializeAnalytics(credential);
      /*
      SQLAdmin sqladmin =
          new SQLAdmin.Builder(httpTransport, JSON_FACTORY, credential).build();*/
      GaData gaData = executeDataQuery(analytics, profileId);
      printGaData(gaData);
    }
    catch(Exception e){
     System.out.println(e);
    }
  }
 
  private static Analytics initializeAnalytics(Credential c) throws Exception {
    // Set up and return Google Analytics API client.
    return new Analytics.Builder(httpTransport, JSON_FACTORY, c).setApplicationName(
        APPLICATION_NAME).build();
  }
 
  private static GaData executeDataQuery(Analytics analytics, String profileId) throws IOException {
    return analytics.data().ga().get( profileId, // Table Id. ga: + profile id.
        "2012-01-01", // Start date.
        "2015-04-10", // End date.
        "ga:visits") // Metrics.
        .setDimensions("ga:source,ga:keyword")
        .setSort("-ga:visits,ga:source")
        .setFilters("ga:medium==organic")
        .setMaxResults(25)
        .execute();
  }
  private static void printGaData(GaData results) {
    System.out.println(
        "printing results for profile: " + results.getProfileInfo().getProfileName());
    if (results.getRows() == null || results.getRows().isEmpty()) {
      System.out.println("No results Found.");
    } else {
      // Print column headers.
      for (ColumnHeaders header : results.getColumnHeaders()) {
        System.out.printf("%30s", header.getName());
      }
      System.out.println();
      // Print actual data.
      for (List<String> row : results.getRows()) {
        for (String column : row) {
          System.out.printf("%30s", column);
        }
        System.out.println();
      }
      System.out.println();
    }
  }
}
 
 
While trying this I am getting following error message:
 
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,

"errors" : [ {

"domain" : "global",

"message" : "Insufficient Permission",

"reason" : "insufficientPermissions"

} ],

"message" : "Insufficient Permission"

}

 

 

 

 
Can someone tell me why I am getting this error? What changes should I make to make this program working?
 
Thanks in advance. Waiting for response.
Reply all
Reply to author
Forward
Message has been deleted
0 new messages