从本地服务器请求Google Analytics数据

Raf*_*ael 8 php google-analytics-api

我想编写一个从GA导入Web统计数据的PHP脚本.该脚本可通过Web前端访问(用于触发导入)并驻留在本地服务器(127.0.0.1)上.

在此输入图像描述

我从文档中了解到,验证和使用核心API有两种选择:

  1. API密钥 - 仅授予对统计信息的访问权限
  2. OAuth2 - 完全授权

如果我正确理解OAuth2的机制,那么在我的场景中这不是一个选项,因为我无法指定回调URL.我想到了Hacky解决方案 - 比如建立一个从浏览器直接连接到GA的Web配置文件身份验证,然后通过JavaScript获取数据并将其提供给导入脚本 - 但我宁愿避免使用这些解决方案.另外,因为将来可能会使用cron作业替换触发导入过程的浏览器交互.

API密钥似乎正是我想要的,但来自浏览器的GET请求失败.

GET请求:

https://www.googleapis.com/analytics/v3/data/ga
  ?ids=ga:[profile ID]
  &start-date=2013-01-01&end-date=2013-01-05
  &metrics=ga:visits
  &key=[the API key]
Run Code Online (Sandbox Code Playgroud)

响应:

{
  error: {
  errors: [
    {
      domain: "global",
      reason: "required",
      message: "Login Required",
      locationType: "header",
      location: "Authorization"
    }
  ],
  code: 401,
  message: "Login Required"
  }
}
Run Code Online (Sandbox Code Playgroud)

虽然URL应该没问题.除了关键参数外,它与http://ga-dev-tools.appspot.com/explorer/生成的关键参数相同,它也有效(在这种情况下使用AOuth2).API密钥是新鲜的.

然后再次生成一个新的API密钥使我面临下一个不便之处,即显然密钥仅在一天内有效.


所以在一天结束时我的问题是:

是否可以在上述方案中获取数据,而无需每天手动进行身份验证或生成API密钥?

ggg*_*ggg 5

如上所述,请使用此库:https://code.google.com/p/google-api-php-client/ 但不是使用oauth,而是从api控制台创建服务帐户(只需选择服务器应用程序).这将为您提供客户端ID,标识服务帐户的电子邮件以及包含私钥的*.p12文件.

然后,您必须以管理员用户身份将服务帐户(电子邮件)添加到分析中,以便获取所需的数据.

要使用该服务:

$client = new Google_Client();
$client->setApplicationName('test');

$client->setAssertionCredentials(
    new Google_AssertionCredentials(
        EMAIL,
        array('https://www.googleapis.com/auth/analytics.readonly'),
        file_get_contents(PRIVATE_KEY_FILEPATH)
    )
);
$client->setClientId(CLIENT_ID);
$client->setAccessType('offline_access');

$analytics = new Google_AnalyticsService($client);
Run Code Online (Sandbox Code Playgroud)

要获得一些数据:

$analytics->data_ga->get(PROFILE_ID, $date_from, $date_to, $metrics, $optParams)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看api文档.另外,要小心,有一个查询上限(除非你支付)