Hello Analytics Reporting API v4; راه اندازی سریع جاوا برای حساب های خدمات

این آموزش مراحل لازم برای دسترسی به Analytics Reporting API v4 را طی می کند.

1. API را فعال کنید

برای شروع استفاده از Analytics Reporting API v4، ابتدا باید از ابزار setup استفاده کنید که شما را از طریق ایجاد پروژه در Google API Console، فعال کردن API و ایجاد اعتبارنامه راهنمایی می‌کند.

اعتبارنامه ایجاد کنید

  1. صفحه حساب‌های سرویس را باز کنید. اگر از شما خواسته شد، یک پروژه را انتخاب کنید.
  2. روی ایجاد حساب سرویس کلیک کنید، نام و توضیحاتی را برای حساب سرویس وارد کنید. می‌توانید از شناسه حساب پیش‌فرض سرویس استفاده کنید یا یک شناسه متفاوت و منحصر به فرد را انتخاب کنید. پس از اتمام روی Create کلیک کنید.
  3. بخش مجوزهای حساب سرویس (اختیاری) که در زیر آمده است مورد نیاز نیست. روی Continue کلیک کنید.
  4. در صفحه Grant users access to this service account account ، به قسمت Create key بروید. روی کلید ایجاد کلیک کنید.
  5. در پانل کناری که ظاهر می شود، قالب کلید خود را انتخاب کنید: JSON توصیه می شود.
  6. روی ایجاد کلیک کنید. جفت کلید عمومی/خصوصی جدید شما تولید و در دستگاه شما دانلود می شود. به عنوان تنها کپی این کلید عمل می کند. برای اطلاعات در مورد نحوه ذخیره ایمن آن، به مدیریت کلیدهای حساب سرویس مراجعه کنید.
  7. روی Close روی کلید خصوصی ذخیره شده در گفتگوی رایانه خود کلیک کنید، سپس روی Done کلیک کنید تا به جدول حساب های خدمات خود بازگردید.

حساب سرویس را به حساب Google Analytics اضافه کنید

حساب سرویس جدید ایجاد شده دارای آدرس ایمیلی است که شبیه به موارد زیر است:

quickstart@PROJECT-ID.iam.gserviceaccount.com

از این آدرس ایمیل برای افزودن کاربری به نمای Google Analytics که می‌خواهید از طریق API به آن دسترسی داشته باشید، استفاده کنید. برای این آموزش فقط به مجوزهای Read & Analyze نیاز است.

2. کتابخانه مشتری را نصب کنید

برای نصب Google Analytics API Java Client، باید یک فایل زیپ حاوی تمام شیشه‌هایی را که باید استخراج و در مسیر کلاس جاوا کپی کنید، دانلود کنید.

  1. کتابخانه Analytics Reporting API v4 Java Client را دانلود کنید، که به عنوان یک فایل ZIP با تمام وابستگی های مورد نیاز همراه است.
  2. فایل ZIP را استخراج کنید.
  3. تمام JARهای داخل دایرکتوری libs را به مسیر کلاس خود اضافه کنید.
  4. jar google-api-services-analyticsreporting-v4-[version].jar را به کلاس خود اضافه کنید.

جزئیات محیط جاوا

کسوف

برای Eclipse ، این سوال StackOverflow را برای دستورالعمل‌های اضافه کردن JAR به مسیر کلاس پروژه خود ببینید.

NetBeans

برای NetBeans ، این سوال StackOverflow را برای دستورالعمل‌های اضافه کردن JAR به مسیر کلاس پروژه خود ببینید.

ایده IntelliJ

برای IntelliJ IDEA این سوال StackOverflow را برای دستورالعمل‌های اضافه کردن JAR به مسیر کلاس پروژه خود ببینید.

خط فرمان

اگر از خط فرمان توسعه می دهید، موارد زیر را به فراخوانی دستورات javac و java اضافه کنید:

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

3. نمونه را راه اندازی کنید

شما باید یک فایل به نام HelloAnalyticsReporting.java ایجاد کنید که حاوی کد نمونه داده شده باشد.

  • client_secrets.json دانلود شده قبلی را به همان دایرکتوری کد نمونه منتقل کنید.
  • مقادیر KEY_FILE_LOCATION را با مقادیر مناسب از Developer 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
    

وقتی این مراحل را تمام کردید، نمونه تعداد جلسات هفت روز گذشته را برای نمای داده شده خروجی می دهد.