This tutorial walks through the steps required to access the Analytics Reporting API v4.
1. Enable the API
To get started using Analytics Reporting API v4, you need to first use the setup tool, which guides you through creating a project in the Google API Console, enabling the API, and creating credentials.
Create credentials
- Open the Service accounts page. If prompted, select a project.
- Click Create Service Account, enter a name and description for the service account. You can use the default service account ID, or choose a different, unique one. When done click Create.
- The Service account permissions (optional) section that follows is not required. Click Continue.
- On the Grant users access to this service account screen, scroll down to the Create key section. Click Create key.
- In the side panel that appears, select the format for your key: JSON is recommended.
- Click Create. Your new public/private key pair is generated and downloaded to your machine; it serves as the only copy of this key. For information on how to store it securely, see Managing service account keys.
- Click Close on the Private key saved to your computer dialog, then click Done to return to the table of your service accounts.
Add service account to the Google Analytics account
The newly created service account will have an email address that looks similar to:
quickstart@PROJECT-ID.iam.gserviceaccount.com
Use this email address to add a user to the Google analytics view you want to access via the API. For this tutorial only Read & Analyze permissions are needed.
2. Install the client library
To install the Google Analytics API Java Client, you must download a zip file containing all of the jars you need to extract and copy into your Java classpath.
- Download the Analytics Reporting API v4 Java Client library, which is bundled as a ZIP file with all the required dependencies.
- Extract the ZIP file.
- Add all the JARs within the
libs
directory to your classpath. - Add the
google-api-services-analyticsreporting-v4-[version].jar
jar to your classpath.
Java environment details
Eclipse
For Eclipse, see this StackOverflow question for instructions on adding JARs to your project's classpath.
NetBeans
For NetBeans, see this StackOverflow question for instructions on adding JARs to your project's classpath.
IntelliJ IDEA
For IntelliJ IDEA see this StackOverflow question for instructions on adding JARs to your project's classpath.
Command line
If developing from the command line, add the following to your javac
and java
command invocations:
-classpath /path/to/directory/with/unzipped/jars
3. Setup the sample
You'll need to create a single file named HelloAnalyticsReporting.java
, which will contain the given sample code.
- Copy or download the following source code to
HelloAnalyticsReporting.java
.
- Move the previously downloaded
client_secrets.json
to the same directory as the sample code. - Replace the values of the
KEY_FILE_LOCATION
with the appropriate values from the Developer Console.
- Replace the value of
VIEW_ID
with the ID of the view you wish to access.
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.gson.GsonFactory; import java.io.FileInputStream; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.google.api.services.analyticsreporting.v4.AnalyticsReportingScopes; import com.google.api.services.analyticsreporting.v4.AnalyticsReporting; import com.google.api.services.analyticsreporting.v4.model.ColumnHeader; import com.google.api.services.analyticsreporting.v4.model.DateRange; import com.google.api.services.analyticsreporting.v4.model.DateRangeValues; 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.Dimension; import com.google.api.services.analyticsreporting.v4.model.MetricHeaderEntry; import com.google.api.services.analyticsreporting.v4.model.Report; import com.google.api.services.analyticsreporting.v4.model.ReportRequest; import com.google.api.services.analyticsreporting.v4.model.ReportRow; public class HelloAnalyticsReporting { private static final String APPLICATION_NAME = "Hello Analytics Reporting"; private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); private static final String KEY_FILE_LOCATION = "<REPLACE_WITH_JSON_FILE>"; private static final String VIEW_ID = "<REPLACE_WITH_VIEW_ID>"; public static void main(String[] args) { try { AnalyticsReporting service = initializeAnalyticsReporting(); GetReportsResponse response = getReport(service); printResponse(response); } catch (Exception e) { e.printStackTrace(); } } /** * Initializes an Analytics Reporting API V4 service object. * * @return An authorized Analytics Reporting API V4 service object. * @throws IOException * @throws GeneralSecurityException */ private static AnalyticsReporting initializeAnalyticsReporting() throws GeneralSecurityException, IOException { HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream(KEY_FILE_LOCATION)) .createScoped(AnalyticsReportingScopes.all()); // Construct the Analytics Reporting service object. return new AnalyticsReporting.Builder(httpTransport, JSON_FACTORY, credential) .setApplicationName(APPLICATION_NAME).build(); } /** * Queries the Analytics Reporting API V4. * * @param service An authorized Analytics Reporting API V4 service object. * @return GetReportResponse The Analytics Reporting API V4 response. * @throws IOException */ private static GetReportsResponse getReport(AnalyticsReporting service) throws IOException { // Create the DateRange object. DateRange dateRange = new DateRange(); dateRange.setStartDate("7DaysAgo"); dateRange.setEndDate("today"); // Create the Metrics object. Metric sessions = new Metric() .setExpression("ga:sessions") .setAlias("sessions"); Dimension pageTitle = new Dimension().setName("ga:pageTitle"); // Create the ReportRequest object. ReportRequest request = new ReportRequest() .setViewId(VIEW_ID) .setDateRanges(Arrays.asList(dateRange)) .setMetrics(Arrays.asList(sessions)) .setDimensions(Arrays.asList(pageTitle)); 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; } /** * Parses and prints the Analytics Reporting API V4 response. * * @param response An Analytics Reporting API V4 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.getValues().size() && k < metricHeaders.size(); k++) { System.out.println(metricHeaders.get(k).getName() + ": " + values.getValues().get(k)); } } } } } }
4. Run the sample
If you're using an IDE, make sure you have a default run target set to the HelloAnalytics
class.
Otherwise you can compile and run the application from the command line:
Compile the sample using:
javac -classpath '/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting.java
Run the sample using:
java -classpath '.:/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting
When you finish these steps, the sample outputs the number of sessions for the last seven days for the given view.