2012-01-31 44 views
7

Tôi đang tìm cách đăng nhập đơn giản nhất vào Analytics và nhận dữ liệu. Tài liệu của Google viết và đưa ra các ví dụ cho Oauth 2.0, bao gồm người dùng đăng nhập bằng tài khoản google của mình theo cách thủ công và sau đó được chuyển hướng đến trang web của tôi với ủy quyền. Nhưng đây không phải là những gì tôi muốn đạt được - Tôi đang xây dựng một công cụ tự động cần có người dùng/pass hoặc bất kỳ khóa ủy quyền nào khác được mã hóa cứng và sau đó đăng nhập mà không cần bất kỳ người dùng nào tham gia (đây là công cụ báo cáo định kỳ) .Ủy quyền Google Analytics trong java

Tôi đã tìm thấy điều gì đó về API KEY, nhưng tôi không thể tìm thấy bất kỳ ví dụ nào về cách thực hiện điều đó hoặc cách thực hiện điều đó với thư viện java của Google.

Tôi sẽ rất biết ơn vì đã chỉ cho tôi đúng hướng. Ngoài ra điều này có thể là đầu mối có giá trị cho người khác làm thế nào để làm điều đó một cách đơn giản nhất - và tôi nghĩ rằng việc đăng nhập phải đơn giản.

Trả lời

2

Tôi đã giải quyết nó cuối cùng với phiên bản 2.4 của Báo cáo chính - có tự động hóa với người dùng/mật khẩu gmail của bạn, đơn giản như vậy - Tôi tự hỏi tại sao không có ví dụ về cách thực hiện điều này trong phiên bản 3.0 mới.

Lõi báo cáo 2.4: http://code.google.com/intl/pl-PL/apis/analytics/docs/gdata/v2/gdataJava.html

+0

Bài đăng của bạn thực sự giúp tôi. Tài liệu phiên bản 3.0 rất khó hiểu và vô dụng. Nó bỏ lỡ rất nhiều bước quan trọng như cách biên dịch client_secrets.json và trỏ đến 'what !!?' Như thế nào? liên kết. Một lần nữa, cảm ơn. –

+0

trang đó bị xóa bởi google tôi đang đối mặt với vấn đề này trong 20 ngày qua, bạn có thể chia sẻ mã chính xác những gì bạn đang sử dụng để truy cập dữ liệu phân tích google –

11

tôi đã cùng một vấn đề và tôi đã cho tôi khoảng 1h để tìm thấy điều này trong tài liệu v3:

Service Accounts

hữu ích cho tự động/ẩn/truy cập được lập lịch vào dữ liệu Google Analytics cho tài khoản của riêng bạn. Ví dụ: để tạo trang tổng quan trực tiếp về dữ liệu Google Analytics của riêng bạn và chia sẻ nó với những người dùng khác.

Có một vài bước bạn cần phải làm theo để cấu hình tài khoản dịch vụ để làm việc với Google Analytics:

  1. đăng ký một dự án trong Console API.
  2. Trong Bảng điều khiển API Google, trong ngăn Truy cập API, tạo ID ứng dụng với Loại ứng dụng được đặt thành Tài khoản dịch vụ.
  3. Đăng nhập vào Google Analytics và điều hướng đến phần Quản trị.
  4. Chọn tài khoản mà bạn muốn ứng dụng có quyền truy cập vào.
  5. Thêm địa chỉ email, từ ID khách hàng được tạo trong Bảng điều khiển API từ bướC# 2, với tư cách là người dùng của tài khoản Google Analytics đã chọn.
  6. Làm theo hướng dẫn cho Tài khoản dịch vụ để truy cập dữ liệu Google Analytics.

Đọc thêm ở đây: https://developers.google.com/analytics/devguides/reporting/core/v3/gdataAuthorization

Puh, tôi đoán API là quá lớn Google đang gặp rắc rối chứng minh điều này một cách dễ dàng =)

Sau đó, tôi nhìn vào mã kiểm tra vào plus-serviceaccount-cmdline-sampleanalytics-cmdline-sample. Đây là một phiên bản rất cơ bản thực hiện trong một ứng dụng java Playframework2 rằng in để System.out như các ví dụ trên:

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); 
private static final JsonFactory JSON_FACTORY = new JacksonFactory(); 

public static Result index() { 
    GoogleCredential credential = null; 
    try { 
     credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId("[email protected]") 
       .setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY)) 
       .setServiceAccountPrivateKeyFromP12File(new File("/your/path/to/privatekey/privatekey.p12"))       
       .build(); 
    } catch (GeneralSecurityException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    // Set up and return Google Analytics API client. 
    Analytics analytics = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(
      "Google-Analytics-Hello-Analytics-API-Sample").build(); 

    String profileId = ""; 
    try { 
     profileId = getFirstProfileId(analytics); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    GaData gaData = null; 
    try { 
     gaData = executeDataQuery(analytics, profileId); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    printGaData(gaData); 

    return ok(index.render("Your new application is ready.")); 
} 

private static String getFirstProfileId(Analytics analytics) throws IOException { 
    String profileId = null; 

    // Query accounts collection. 
    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 webproperties collection. 
     Webproperties webproperties = 
       analytics.management().webproperties().list(firstAccountId).execute(); 

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

      // Query profiles collection. 
      Profiles profiles = 
        analytics.management().profiles().list(firstAccountId, firstWebpropertyId).execute(); 

      if (profiles.getItems().isEmpty()) { 
       System.err.println("No profiles found"); 
      } else { 
       profileId = profiles.getItems().get(0).getId(); 
      } 
     } 
    } 
    return profileId; 
} 

/** 
* Returns the top 25 organic search keywords and traffic source by visits. The Core Reporting API 
* is used to retrieve this data. 
* 
* @param analytics the analytics service object used to access the API. 
* @param profileId the profile ID from which to retrieve data. 
* @return the response from the API. 
* @throws IOException tf an API error occured. 
*/ 
private static GaData executeDataQuery(Analytics analytics, String profileId) throws IOException { 
    return analytics.data().ga().get("ga:" + profileId, // Table Id. ga: + profile id. 
      "2012-01-01", // Start date. 
      "2012-01-14", // End date. 
      "ga:visits") // Metrics. 
      .setDimensions("ga:source,ga:keyword") 
      .setSort("-ga:visits,ga:source") 
      .setFilters("ga:medium==organic") 
      .setMaxResults(25) 
      .execute(); 
} 

/** 
* Prints the output from the Core Reporting API. The profile name is printed along with each 
* column name and all the data in the rows. 
* 
* @param results data returned from the Core Reporting API. 
*/ 
private static void printGaData(GaData results) { 
    System.out.println("printing results for profile: " + results.getProfileInfo().getProfileName()); 

    if (results.getRows() == null || results.getRows().isEmpty()) { 
     System.out.println("No results Found."); 
    } else { 

     // Print column headers. 
     for (GaData.ColumnHeaders header : results.getColumnHeaders()) { 
      System.out.printf("%30s", header.getName()); 
     } 
     System.out.println(); 

     // Print actual data. 
     for (List<String> row : results.getRows()) { 
      for (String column : row) { 
       System.out.printf("%30s", column); 
      } 
      System.out.println(); 
     } 

     System.out.println(); 
    } 
} 

Hope this helps!

+0

Điều này có thực tế không? Đặc biệt, tệp P12: bạn có tạo hoặc tải xuống tệp đó hay không. Ngoài ra, là một khóa API mới cần thiết cho mỗi máy mà mã này là để chạy? – Jeff

+0

Khi tạo tài khoản dịch vụ, không chọn JSON ưa thích (bởi Google), nhưng chọn P12. Tôi dành chút thời gian tìm cách tạo một 'PrivateKey' từ một tệp JSON, nhưng không thể tìm thấy bất kỳ thứ gì trong một khoảng thời gian hợp lý. –

0

Tôi đã cố gắng làm theo ví dụ được cung cấp và nó không biên dịch. Tôi không biết nếu điều này là 3,0 vs 2,4 và nếu có, là có một cách mà mã ví dụ có thể được thực hiện để làm việc - sự lựa chọn thích hợp của lọ hoặc những gì.

Một vấn đề với ví dụ là đối số cho setServiceAccountScopes không còn là một chuỗi mà là một Collections.singleton (AnalyticsScopes.Analytics.READ_ONLY).

Cũng rất quan trọng để sử dụng ví dụ là cấu hình đúng của Tài khoản dịch vụ.

Các vấn đề liên quan