Hello Analytics API: מדריך למתחילים ב-Java לחשבונות שירות

במדריך הזה מפורטים השלבים שצריך לבצע כדי לגשת לחשבון Google Analytics, לשלוח שאילתות לממשקי ה-API של Analytics, לטפל בתשובות ה-API ולהציג פלט של התוצאות. במדריך הזה אנחנו משתמשים בגרסה 3.0 של ממשק ה-API הראשי לדיווח, ב-Management API v3.0 וב-OAuth2.0.

שלב 1: מפעילים את ה-API של Analytics

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

יצירת מזהה לקוח

  1. פותחים את הדף Service accounts. אם מתבקשים, בוחרים פרויקט.
  2. לוחצים על Create Service Account (יצירת חשבון שירות), מזינים את השם והתיאור של חשבון השירות. אפשר להשתמש במספר של חשבון השירות שמוגדר כברירת מחדל, או לבחור מספר אחר וייחודי. כשמסיימים, לוחצים על יצירה.
  3. הקטע הרשאות חשבון שירות (אופציונלי) שמופיע כאן אינו הכרחי. לוחצים על Continue.
  4. במסך Grant users access to this service account גוללים למטה לקטע Create key. לוחצים על Create key.
  5. בחלונית הצדדית שמופיעה, בוחרים את פורמט המפתח: מומלץ להשתמש ב-JSON.
  6. לוחצים על יצירה. זוג המפתחות הציבורי/פרטי החדש שלך נוצר והורד למחשב שלך. הוא משמש כעותק היחיד של המפתח הזה. למידע נוסף על אחסון מאובטח, כדאי לקרוא את המאמר ניהול מפתחות של חשבונות שירות.
  7. לוחצים על Close בתיבת הדו-שיח Private key saved to your במחשב, ולאחר מכן לוחצים על Done כדי לחזור לטבלה של חשבונות השירות.

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

לחשבון השירות החדש שנוצר תהיה כתובת אימייל, <projectId>-<uniqueId>@developer.gserviceaccount.com. יש להשתמש בכתובת האימייל הזו כדי להוסיף משתמש לחשבון Google Analytics שאליו ברצונך לגשת דרך ה-API. במדריך הזה מפורטות רק ההרשאות של קריאה וניתוח.

שלב 2: מתקינים את ספריית הלקוח של Google

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

  1. מורידים את ספריית הלקוח של Google Analytics Java, שמצורפת לקובץ ZIP עם כל יחסי התלות הנדרשים.
  2. חילוץ קובץ ה-ZIP
  3. מוסיפים ל-classpath את כל ספריות ה-JAR שבתוך הספרייה libs.
  4. מוסיפים את הצנצנת google-api-services-analytics-v3-[version].jar לנתיב הכיתה.

שלב 3: מגדירים את הדוגמה

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

  1. מעתיקים או מורידים את קוד המקור הבא אל HelloAnalytics.java.
  2. מעבירים את client_secrets.JSON שהורדתם בעבר לאותה ספרייה שבה נמצא הקוד לדוגמה.
  3. מחליפים את הערכים של KEY_FILE_LOCATION בערכים המתאימים מ-Play Console.
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 com.google.api.services.analytics.Analytics;
import com.google.api.services.analytics.AnalyticsScopes;
import com.google.api.services.analytics.model.Accounts;
import com.google.api.services.analytics.model.GaData;
import com.google.api.services.analytics.model.Profiles;
import com.google.api.services.analytics.model.Webproperties;

import java.io.FileInputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.io.IOException;


/**
 * A simple example of how to access the Google Analytics API using a service
 * account.
 */
public class HelloAnalytics {


  private static final String APPLICATION_NAME = "Hello Analytics";
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  private static final String KEY_FILE_LOCATION = "<REPLACE_WITH_JSON_FILE>";
  public static void main(String[] args) {
    try {
      Analytics analytics = initializeAnalytics();

      String profile = getFirstProfileId(analytics);
      System.out.println("First Profile Id: "+ profile);
      printResults(getResults(analytics, profile));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * Initializes an Analytics service object.
   *
   * @return An authorized Analytics service object.
   * @throws IOException
   * @throws GeneralSecurityException
   */
  private static AnalyticsReporting initializeAnalytic() throws GeneralSecurityException, IOException {

    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = GoogleCredential
        .fromStream(new FileInputStream(KEY_FILE_LOCATION))
        .createScoped(AnalyticsScopes.all());

    // Construct the Analytics service object.
    return new Analytics.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }


  private static String getFirstProfileId(Analytics analytics) throws IOException {
    // Get the first view (profile) ID for the authorized user.
    String profileId = null;

    // Query for the list of all accounts associated with the service account.
    Accounts accounts = analytics.management().accounts().list().execute();

    if (accounts.getItems().isEmpty()) {
      System.err.println("No accounts found");
    } else {
      String firstAccountId = accounts.getItems().get(0).getId();

      // Query for the list of properties associated with the first account.
      Webproperties properties = analytics.management().webproperties()
          .list(firstAccountId).execute();

      if (properties.getItems().isEmpty()) {
        System.err.println("No Webproperties found");
      } else {
        String firstWebpropertyId = properties.getItems().get(0).getId();

        // Query for the list views (profiles) associated with the property.
        Profiles profiles = analytics.management().profiles()
            .list(firstAccountId, firstWebpropertyId).execute();

        if (profiles.getItems().isEmpty()) {
          System.err.println("No views (profiles) found");
        } else {
          // Return the first (view) profile associated with the property.
          profileId = profiles.getItems().get(0).getId();
        }
      }
    }
    return profileId;
  }

  private static GaData getResults(Analytics analytics, String profileId) throws IOException {
    // Query the Core Reporting API for the number of sessions
    // in the past seven days.
    return analytics.data().ga()
        .get("ga:" + profileId, "7daysAgo", "today", "ga:sessions")
        .execute();
  }

  private static void printResults(GaData results) {
    // Parse the response from the Core Reporting API for
    // the profile name and number of sessions.
    if (results != null && !results.getRows().isEmpty()) {
      System.out.println("View (Profile) Name: "
        + results.getProfileInfo().getProfileName());
      System.out.println("Total Sessions: " + results.getRows().get(0).get(0));
    } else {
      System.out.println("No results found");
    }
  }
}

שלב 4: מריצים את הדוגמה

אחרי שמפעילים את Analytics API, מתקינים את ספריית הלקוח של Google APIs עבור Java, ומגדירים את קוד המקור לדוגמה שהדוגמה מוכנה להפעלה.

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

  1. מכינים את הדגימה לפי:
    javac -classpath /path/to/google/lib/*:/path/to/google/lib/libs/* HelloAnalytics.java
  2. מריצים את הדוגמה באמצעות:
    java -classpath ./:/path/to/google/lib/*:/path/to/google/lib/libs/* HelloAnalytics

לאחר סיום השלבים האלה, הפלט של הדגימה יהיה שם התצוגה המפורטת (הפרופיל) הראשונה של המשתמש המורשה ב-Google Analytics ומספר הסשנים בשבעת הימים האחרונים.

בעזרת אובייקט השירות המורשה של Analytics תוכלו עכשיו להריץ כל קוד לדוגמה שנמצא במסמכי העזר בנושא Management API. לדוגמה, אפשר לשנות את הקוד לשימוש בשיטה accountSummaries.list.