oauth-2.0 - 生成并接收 GA API key 以通过 OAuth2 进行简单 API 访问

标签 oauth-2.0 google-analytics-api google-oauth google-api-java-client kettle

故事是这样的:

我使用 Pentaho Kettle 通过简单 API 访问从 Google Analytics 查询网络统计信息。对于此请求,我需要 API key 。现在这个 API key 时不时地变得无效(我不确定节奏是什么),然后请求当然会失败。因此,我想生成一个新的,接收它并使其可用于 ETL 作业及其 GA 步骤。

我的计划是通过嵌入一个或多个“User Defined Java Class”步骤中的Java来完成此操作,通过google-api-java-client和一个Service Account 。 Kettle 作业生成一个新的 API key ,接收它并通过字段或直接作为参数提供 API key 。

但主要我对所描述用例的通用 Java 解决方案感兴趣。如果有人有一个 Kettle 解决方案那就更好了,但我提到这些细节主要是为了将问题放在上下文中。

问题:如何为 Google Analytics Simple API Access 生成新的 API key 并通过 OAuth2 使用 google-api-java-client 接收它,而无需用户交互(完全自动化)?

赏金:如果您能提供 Java 程序或详细的 API 调用序列,我将不胜感激。该程序的输出是适用于简单 API 访问的功能 API key 。鉴于所涉及的预期工作,我选择了尽可能最高的赏金。


我注册了一个服务帐户,因此我有以下可用的 ID 和公司:

  • 客户端 ID
    • 123.apps.googleusercontent.com
  • 电子邮件地址
  • 公钥指纹
    • abcxxx
  • client_secrets.json
    • {...}
  • 私钥
    • abcxxx-privatekey.p12

client_secrets.json:

{"web":{
  "auth_uri":            "https://accounts.google.com/o/oauth2/auth",
  "token_uri":           "https://accounts.google.com/o/oauth2/token",
  "client_email":        "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2e1f1c1d6e4a4b584b42415e4b5c00495d4b5c58474d4b4f4d4d415b405a004d4143" rel="noreferrer noopener nofollow">[email protected]</a>",
  "client_x509_cert_url":"https://www.../<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="19282b2a597d7c6f7c7576697c6b377e6a7c6b6f707a7c787a7a766c776d377a7674" rel="noreferrer noopener nofollow">[email protected]</a>",
  "client_id":           "123.apps.googleusercontent.com",
  "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"
}}

最佳答案

在代码之前有几件事:

  1. 从技术上讲,如果您使用 OAuth 2.0 进行身份验证,则简单 API 访问根本不适用。因此您无需担心 API Key。 Pentaho 的说明很旧,除非您使用非 OAuth 2.0 身份验证机制(这不是您应该做的),否则不适用

  2. 您最喜欢使用的是不需要任何人工交互的服务帐户进行身份验证。

注册应用程序

如果您尚未在 Google Cloud Console 中注册您的应用,请在 Cloud Console 中设置项目和应用。系统将引导您完成选择或创建项目以及注册新应用程序的过程,并自动为您激活 API。

如果您已通过 Cloud Console 注册应用程序,请按照以下过程操作:

转到Google Cloud Console 。 选择一个项目。 在左侧边栏中,选择 API 和身份验证。在显示的 API 列表中,确保 Analytics API 状态设置为开启。 在左侧边栏中,选择已注册的应用程序。 选择一个应用程序。 无论哪种情况,您最终都会进入应用程序的凭据页面。

要设置服务帐户,请展开“证书”部分。然后选择生成证书。 (如果您已有证书,可以通过选择“生成新 key ”来添加新 key 。)将出现一个对话框;选择下载私钥以继续。下载完成后,选择“查看公钥”。

下载文件并关闭对话框后,您将能够获取服务帐户的电子邮件地址。

下载用于分析的 Java 客户端库

访问https://developers.google.com/api-client-library/java/apis/analytics/v3

转到底部的将库添加到您的项目部分,下载适用于 Java 的 Google Analytics API v3 客户端库。

将服务帐户电子邮件添加到 GA 帐户

将服务帐户电子邮件添加到您想要通过 API 访问的 Google Analytics(分析)帐户。

获得访问次数的示例 Java 应用程序

以下代码片段适用于核心报告 API。它使用服务帐户进行身份验证。然后,它会检索 Analytics 配置文件的访问并输出该数字。

要使用此功能,您显然应该替换服务帐户电子邮件和私钥文件的路径。此外,您还需要从 libs 文件夹导入用于分析的 Java 客户端和相关 JAR。

另请参阅 Google Analytics Core Reporting API docs学习使用维度和指标、分割、过滤器等查询 API。

您应该能够自定义它以与您的应用程序一起使用。

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.HashSet;
import java.util.Set;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.analytics.Analytics;
import com.google.api.services.analytics.AnalyticsScopes;
import com.google.api.services.analytics.model.GaData;

public class AnalyticsSample  {

    private static final String APPLICATION_NAME = "APP_NAME";

    private static final String SERVICE_ACCOUNT_EMAIL = "<YOUR_SERVICE_ACCOUNT_EMAIL>@developer.gserviceaccount.com";

    /** Path to the Service Account's Private Key file */
    private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH = "/path/to/-privatekey.p12";

    private static Analytics service;

    public static Analytics getAnalyticsService() throws GeneralSecurityException, IOException {
        Set<String> scopes = new HashSet<String>();
        scopes.add(AnalyticsScopes.ANALYTICS_READONLY); // You can set other scopes if needed 

        HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory jsonFactory = new JacksonFactory();
        GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
            .setServiceAccountScopes(scopes)
            .setServiceAccountPrivateKeyFromP12File(
                    new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
            .build();
        Analytics service = new Analytics.Builder(httpTransport, jsonFactory, null)
            .setHttpRequestInitializer(credential)
            .setApplicationName(APPLICATION_NAME)
            .build();
        return service;
    }

     public static void main(String[] args) {
         try {
             service = getAnalyticsService();
             GaData result = service.data().ga().get(
                     "ga:<YOUR PROFILE ID>",
                     "2013-10-16", // Start date
                     "2013-10-17", // End Date
                     "ga:visits").execute();  // Add Dimensions and metrics

             System.out.println(result.getRows().get(0).get(0)); // Just an example of output

         } catch (IOException e) {
             System.err.println(e.getMessage());
         } catch (GeneralSecurityException e) {
             System.err.println(e.getMessage());
         } catch (Throwable t) {
             t.printStackTrace();
         }
         System.exit(1);
     }

}

关于oauth-2.0 - 生成并接收 GA API key 以通过 OAuth2 进行简单 API 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19362771/

相关文章:

Android oAuth 刷新 token 返回 null

angular - 将 Bearer token 传递给不同的 APP_INITIALIZER 以从 Angular App 中的服务器加载配置

authentication - 使用 OAuth 2.0 和 Userinfo API 与 Google 进行身份验证,验证电子邮件意味着什么?

ios - Strava alamofire token

php - Google API - 每次都强制授予权限

node.js - 如何使用 Node.js 在远程服务器上对 google Sheets api 的用户进行身份验证?

oauth-2.0 - 使用 Xojo 和 Chilkat 与 Xero 进行 OAuth2 集成

javascript - Google Analytics 数据显示在我的网站上/使用 Javascript

java - 连接到 google analytics api 时 Java 中的 SSL 异常

c# - 带有 C# 示例的 Google BigQuery