שלום Analytics Reporting API v4; קיצור דרך ל-Java בחשבונות שירות

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

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

1. הפעלת ה-API

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

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

  1. פותחים את דף חשבונות השירות. אם תתבקשו, עליכם לבחור פרויקט.
  2. לוחצים על יצירת חשבון שירות, מזינים שם ותיאור לחשבון השירות. אפשר להשתמש במספר ברירת המחדל של חשבון השירות, או לבחור מספר ייחודי וייחודי. כשמסיימים, לוחצים על יצירה.
  3. הקטע הרשאות חשבון שירות (אופציונלי) שבהמשך לא נדרש. לוחצים על המשך.
  4. במסך הענקת גישה למשתמשים בחשבון השירות הזה, גוללים למטה לקטע יצירת מפתח. לוחצים על יצירת מפתח.
  5. בחלונית הצדדית שמופיעה, בוחרים את הפורמט של המפתח: מומלץ להשתמש בקובץ JSON.
  6. לוחצים על Create. זוג המפתחות הציבורי/הפרטי החדש נוצר ומוריד למחשב שלך. הוא משמש כעותק היחיד של המפתח הזה. מידע נוסף על אחסון מאובטח לניהול מפתחות בחשבון שירות.
  7. לוחצים על סגירה בתיבת הדו-שיח מפתח פרטי שנשמר במחשב, ואז לוחצים על סיום כדי לחזור לטבלה של חשבונות השירות.

מוסיפים חשבון שירות לחשבון Google Analytics

לחשבון השירות החדש תהיה כתובת אימייל שדומה ל:

quickstart@PROJECT-ID.iam.gserviceaccount.com

אפשר להשתמש בכתובת האימייל הזו כדי להוסיף משתמש לתצוגה המפורטת של Google Analytics שאליה רוצים לגשת באמצעות ה-API. למדריך הזה נדרשות רק הרשאות קריאה וניתוח.

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 שהורדתם בעבר לאותה ספרייה של הקוד לדוגמה.
  • יש להחליף את הערכים של KEY_FILE_LOCATION בערכים המתאימים מ-Play Console.
  • מחליפים את הערך של VIEW_ID במזהה של התצוגה המפורטת שאליה רוצים לגשת.
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. הרצת הדגימה

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

  • הכנת הדוגמה באמצעות:

    javac -classpath '/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting.java
    
  • הרצת הדגימה באמצעות:

    java -classpath '.:/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting
    

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