试图通过http访问Google Analytics API时出现身份验证错误(不使用oAuth)

试图通过http访问Google Analytics API时出现身份验证错误(不使用oAuth),api,authentication,google-analytics,http-status-code-401,Api,Authentication,Google Analytics,Http Status Code 401,我正在尝试构建一个简单的脚本来导入通过我的CMS发布的文章的页面视图计数。我使用Google Analytics API查询生成器轻松构建了查询,该查询生成器可以快速返回所需的结果。我的web服务器上的计划作业将每天运行一次查询,并计算更新和页面查看次数 因为我只是获取页面浏览量,所以我相信没有必要经历整个oAuth过程。这个Google帐户只有一个web属性和一个配置文件,所以不需要一个例程来派生它 我注册了一个应用程序并创建了一个API密钥。我已确保此配置文件已启用Google Analyt

我正在尝试构建一个简单的脚本来导入通过我的CMS发布的文章的页面视图计数。我使用Google Analytics API查询生成器轻松构建了查询,该查询生成器可以快速返回所需的结果。我的web服务器上的计划作业将每天运行一次查询,并计算更新和页面查看次数

因为我只是获取页面浏览量,所以我相信没有必要经历整个oAuth过程。这个Google帐户只有一个web属性和一个配置文件,所以不需要一个例程来派生它

我注册了一个应用程序并创建了一个API密钥。我已确保此配置文件已启用Google Analytics。根据我对API的阅读,我相信我可以将此密钥作为http参数传递,以正确授权查询

当我通过http运行查询时,我得到一个授权错误(401)。查询内容如下:

https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3A[MY ID]&metrics=ga%3Apageviews&start-date=2012-08-09&end-date=2012-08-23&max-results=50&key=[MY API KEY]
我在谷歌上搜索了很多这样的例子,但它们似乎都实现了一个非常复杂的(在我的用例中是不必要的)身份验证例程。但也许我错过了什么

非常感谢

  • 克里斯,失意的谷歌人

使用此示例修复401错误

您需要授权:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

$data = array(
    'accountType' => 'GOOGLE',
    'Email' => $email,
    'Passwd' => $password,
    'service' => 'analytics',
    'source' => ''
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

$auth = '';
if($info['http_code'] == 200) {
    preg_match('/Auth=(.*)/', $output, $matches);
    if(isset($matches[1])) {
        $auth = $matches[1];
    } else {
        throw new Exception('Login failed with message: ' . $output);
    }
}
授权后,在标头中发送授权令牌:

$headers = array("Authorization: GoogleLogin auth=$auth");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

孤立链接被认为是一个糟糕的答案(请参阅),因为它本身毫无意义,而且目标资源也不能保证在将来仍然存在。在这里包括答案的基本部分,并提供链接供参考。感谢您的建议。我改进了我的答案