שלום Analytics Reporting API v4; התחלה מהירה של Java עבור אפליקציות מותקנות

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

במדריך הזה מפורטים השלבים הנדרשים כדי לגשת ל-Analytics Reporting API v4.

1. הפעלת ה-API

כדי להתחיל להשתמש ב-Analytics Reporting API v4, צריך קודם כל להשתמש בכלי ההגדרה, שכולל הנחיות ליצירת פרויקט ב-Google API Console, להפעלת ה-API וליצירת פרטי כניסה.

הערה: כדי ליצור מזהה לקוח באינטרנט או לקוח אפליקציה מותקן, צריך להגדיר שם מוצר במסך ההסכמה. אם עדיין לא עשיתם זאת, תתבקשו להגדיר את מסך ההסכמה.

יצירת פרטי כניסה

  • פותחים את דף פרטי הכניסה.
  • לוחצים על יצירת פרטי כניסה ובוחרים באפשרות מזהה לקוח OAuth.
  • בשדה סוג אפליקציה, בוחרים באפשרות אחר.
  • נותנים שם למזהה הלקוח התחלה ולוחצים על יצירה.

בדף פרטי הכניסה, לוחצים על מזהה הלקוח החדש שנוצר, לוחצים על הורדת JSON ושומרים אותו כ-client_secrets.json. הוא נדרש בהמשך המדריך.

2. התקנה של ספריית הלקוח

כדי להתקין את לקוח ה-Java API של Google Analytics, עליך להוריד קובץ ZIP המכיל את כל הצנצנות הדרושות לחילוץ והעתקה לנתיב הכיתה של Java.

  1. מורידים את ספריית הלקוח של Analytics Reporting API v4, שמקובצת כקובץ ZIP עם כל יחסי התלות הנדרשים.
  2. יש לחלץ את קובץ ה-ZIP.
  3. הוספה של כל ה-JARs שבספרייה libs לנתיב הכיתה.
  4. מוסיפים את הצנצנת google-api-services-analyticsreporting-v4-[version].jar לנתיב לכיתה.

פרטים על סביבת Java

ליקוי חמה

ב-Eclipse, כדאי לעיין בשאלה הזו ב-Stack Overflow לקבלת הוראות להוספת JAR לנתיב הכיתה בפרויקט.

NetBeans

אם מדובר ב-NetBeans, ניתן לעיין בשאלה זו ב-Stack Overflow לקבלת הוראות להוספת JAR לנתיב הכיתה בפרויקט.

IntelidJ IDEA

כדי לקבל מידע על IntelliJ IDEA, אפשר לעיין בשאלה הזו ב-Stack Overflow כדי לקבל הוראות להוספת JAR למסלול הפרויקט.

שורת הפקודה

אם מפתחים את שורת הפקודה, מוסיפים את הערכים הבאים להפעלות הפקודה javac ו-java:

-classpath /path/to/directory/with/unzipped/jars

3. הגדרת הדוגמה

צריך ליצור קובץ יחיד בשם HelloAnalyticsReporting.java, שיכיל את קוד הדוגמה הנתון.

  • מעתיקים או מורידים את קוד המקור הבא אל HelloAnalyticsReporting.java.
  • מעבירים את client_secrets.json שהורדתם בעבר לאותה ספרייה של הקוד לדוגמה.
  • מחליפים את הערך של VIEW_ID במזהה של התצוגה המפורטת שאליה רוצים לגשת.
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;

import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.google.analyticsreporting.v4.AnalyticsreportingScopes;
import com.google.analyticsreporting.v4.Analyticsreporting;
import com.google.analyticsreporting.v4.model.ColumnHeader;
import com.google.analyticsreporting.v4.model.DateRange;
import com.google.analyticsreporting.v4.model.DateRangeValues;
import com.google.analyticsreporting.v4.model.Dimension;
import com.google.analyticsreporting.v4.model.GetReportsRequest;
import com.google.analyticsreporting.v4.model.GetReportsResponse;
import com.google.analyticsreporting.v4.model.Metric;
import com.google.analyticsreporting.v4.model.MetricHeaderEntry;
import com.google.analyticsreporting.v4.model.Report;
import com.google.analyticsreporting.v4.model.ReportRequest;
import com.google.analyticsreporting.v4.model.ReportRow;


/**
 * A simple example of how to access the Google Analytics API.
 */
public class HelloAnalytics {
  // Path to client_secrets.json file downloaded from the Developer's Console.
  // The path is relative to HelloAnalytics.java.
  private static final String CLIENT_SECRET_JSON_RESOURCE = "client_secrets.json";

  // Replace with your view ID.
  private static final String VIEW_ID = "<REPLACE_WITH_VIEW_ID>";

  // The directory where the user's credentials will be stored.
  private static final File DATA_STORE_DIR = new File(
      System.getProperty("user.home"), ".store/hello_analytics");

  private static final String APPLICATION_NAME = "Hello Analytics Reporting";
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  private static NetHttpTransport httpTransport;
  private static FileDataStoreFactory dataStoreFactory;

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

      GetReportsResponse response = getReport(service);
      printResponse(response);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }


  /**
   * Initializes an authorized Analytics Reporting service object.
   *
   * @return The analytics reporting service object.
   * @throws IOException
   * @throws GeneralSecurityException
   */
  private static Analyticsreporting initializeAnalyticsReporting() throws GeneralSecurityException, IOException {

    httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

    // Load client secrets.
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
        new InputStreamReader(HelloAnalytics.class
            .getResourceAsStream(CLIENT_SECRET_JSON_RESOURCE)));

    // Set up authorization code flow for all authorization scopes.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
        .Builder(httpTransport, JSON_FACTORY, clientSecrets,
            AnalyticsreportingScopes.all()).setDataStoreFactory(dataStoreFactory)
        .build();

    // Authorize.
    Credential credential = new AuthorizationCodeInstalledApp(flow,
        new LocalServerReceiver()).authorize("user");
    // Construct the Analytics Reporting service object.
    return new Analyticsreporting.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }

  /**
   * Query the Analytics Reporting API V4.
   * Constructs a request for the sessions for the past seven days.
   * Returns the API response.
   *
   * @param service
   * @return GetReportResponse
   * @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");

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

    // Create the ReportRequest object.
    ReportRequest request = new ReportRequest()
        .setViewId(VIEW_ID)
        .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 = service.reports().batchGet(getReport).execute();

    // Return the response.
    return response;
  }

  /**
   * Parses and prints the Analytics Reporting API V4 response.
   *
   * @param response the 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. הרצת הדגימה

אם נעשה שימוש ב-IDE, צריך לוודא שיעד הריצה המוגדר כברירת מחדל הוא HelloAnalytics.

  • האפליקציה תטען את דף ההרשאה בדפדפן.
  • אם עוד לא התחברת לחשבון Google שלך, תתבקשו להתחבר. אם אתם מחוברים לכמה חשבונות Google, תתבקשו לבחור חשבון אחד שישמש להרשאה.

בסיום השלבים האלה, הדגימה מפיקה את מספר הביקורים במהלך שבעת הימים האחרונים עבור התצוגה המפורטת הנתונה.