60

我正在尝试制作一个服务器应用程序来定期从我自己的 GA 帐户中提取 Google Analytics 数据。请注意,它是访问我自己的数据的个人服务器端应用程序,即没有最终用户访问此应用程序。

因此,我在Google API Console中将我的应用程序注册为Service Application,它给了我一个Client ID和一个Private Key。据我了解,服务应用程序不使用应用程序密钥重定向 URL,因为在此服务器到服务器身份验证流程中没有最终用户。事实上,Google API 控制台没有给我任何秘密,也没有提示我输入重定向 URL。

不幸的是,我不知道如何在Google 的 PHP Client API中验证我的服务应用程序。有大量关于通过最终用户验证 Web 应用程序文档。

Google 的文档表明,可以通过使用 private key 签署 JWT 请求来验证服务器到服务器的身份。我只是不知道如何在 PHP 客户端 API 中进行操作(尽管我已经浏览了源代码,并且肯定有一个脚本可以使用私钥对请求进行签名。)

我在这里错过了什么吗?如何使用我的私钥和 Google PHP 客户端 API 对服务应用程序执行身份验证?

为清晰起见进行了编辑

4

4 回答 4

107

2012 年 7 月 21 日更新

Google Analytics API V3 现在支持由 .p12 签名的 JWT 请求返回的 OAuth2 令牌。也就是说,我们现在可以使用带有服务帐户的 Analytics API

目前正在提取 4 年的日常指标,只是为了它。

这是一个快速的'n'肮脏的一步一步:

  1. 转到Google API 控制台并创建一个新应用

  2. 在“服务”选项卡中,翻转Google Analytics开关

  3. API 访问选项卡中,单击创建 OAuth2.0 客户端 ID

    • 输入您的姓名,上传徽标,然后单击下一步

    • 选择服务帐户选项并按创建客户端 ID

    • 下载你的私钥

  4. 现在您回到API 访问页面。您将看到一个名为服务帐户的部分,其中包含客户 ID电子邮件地址

    • 复制电子邮件地址(类似于####@developer.gserviceaccount.com

    • 访问您的GA 管理员并将此电子邮件作为用户添加到您的属性

    • 这是必须的;否则你会得到神秘的错误。

  5. 通过 Github获取最新的Google PHP Client API

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
    
  6. 摇滚乐(感谢所有关于更新类名的提示):

    // api dependencies
    require_once(PATH_TO_API . 'Google/Client.php');
    require_once(PATH_TO_API . 'Google/Service/Analytics.php');
    
    // create client object and set app name
    $client = new Google_Client();
    $client->setApplicationName(APP_NAME); // name of your app
    
    // set assertion credentials
    $client->setAssertionCredentials(
      new Google_Auth_AssertionCredentials(
    
        APP_EMAIL, // email you added to GA
    
        array('https://www.googleapis.com/auth/analytics.readonly'),
    
        file_get_contents(PATH_TO_PRIVATE_KEY_FILE)  // keyfile you downloaded
    
    ));
    
    // other settings
    $client->setClientId(CLIENT_ID);           // from API console
    $client->setAccessType('offline_access');  // this may be unnecessary?
    
    // create service and get data
    $service = new Google_Service_Analytics($client);
    $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
    

 

下面的原始解决方法


似乎尽管文档模棱两可,但大多数 Google API 还不支持服务帐户,包括 Google Analytics。他们无法消化 .p12 签名的 JWT 请求返回的 OAuth2 令牌。因此,到目前为止,您不能将 Google Analytics API V3 与服务帐户一起使用

解决方法:

  1. Google API 控制台中,创建一个客户端应用程序。

  2. 按照Google PHP Client API示例中的步骤client_auth_url使用您的client_idclient_secretredirect_uri

  3. 使用 cURL登录Google 。(一定要使用 cookie 文件!)

  4. 打开client_auth_urlin cURL 并填写表格。确保您在响应 的标头 中设置了curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);和 。curl_setopt($ch, CURLOPT_HEADER, 1);authorization_codeLocation:

  5. 使用您的client_idclient_secretredirect_uri和第 4 步中的激活码,向Google 的 OAuth2 令牌机器发送请求。确保包含grant_type = "authorization_code"在您的帖子字段中。

  6. 万岁,你现在有一个refresh_token永不过期的,一个工作的access_token!使用您的, ,向Google 的 OAuth2 令牌机器发送请求,当您过期时,您将获得一个新令牌。client_idclient_secretredirect_urirefresh_tokenaccess_token

于 2012-04-10T13:26:22.680 回答
4

Google API PHP 客户端现在支持中继上的服务帐户。

该实现尚未发布,因此您需要检查最新版本的 PHP 客户端。

我准备了一个示例应用程序,演示如何使用服务帐户访问 Google Prediction API。要查看示例,请查看 examples/prediction/serviceAccount.php 或访问: http ://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount .php

于 2012-03-26T16:40:05.687 回答
2

您可以使用非常有用的 php 库GAPI(Google Analytics API PHP 接口)在没有 OAuth 的情况下访问 Google Analytics。它很容易使用。

于 2012-09-19T21:34:54.693 回答
2

如果您使用的是Google 的 PHP 客户端 API,请转到Google API 控制台并单击API Access左侧的 。

然后Create a Client ID。这会给你secret,它是你设置你的redirect URL. 它不会为您提供重定向 URL - 这是应用程序在验证后将用户发送回的 URL。

您可以查看其他身份验证方法。

于 2012-03-25T21:15:00.133 回答