我正在试图弄清楚如何使用Google API PHP Client来访问Google Analytics。具体来说,我想从其他广告系列中upload cost data。我的代码确实可以从GA获取信息,我可以查看配置文件的流量数据,但我无法弄清楚如何上传。
这是我用于身份验证的代码:
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_AnalyticsService.php';
session_start();
$client = new Google_Client();
$client->setApplicationName("GA-Tester");
$client->setClientId('xxx.apps.googleusercontent.com');
$client->setClientSecret('xxx');
$client->setRedirectUri('http://www.site.com/indext.php');
$client->setDeveloperKey('xxx');
$analyticsService = new Google_AnalyticsService($client);
$dailyUploads = $analyticsService->management_dailyUploads;
if (isset($_GET['logout'])) {
unset($_SESSION['token']);
}
if (isset($_GET['code'])) {
$client->authenticate();
$_SESSION['token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
if (!$client->getAccessToken()) {
header ('Location:http://www.site.com/indext.php');
} else {...
此代码适用于请求数据。我可以获取帐户列表,个人资料,下载特定个人资料的流量数据等。没有错误或问题。
当我尝试上传包含费用数据的CSV文件时,出现“401 Invalid Credentials”错误。这是发送文件的代码:
$send = $dailyUploads->upload(
$accountId,
$webPropertyId,
$customDataSourceId,
$start_date,
1,
'cost',
array(
"reset" => true,
"data" => $cont,
"mimeType" => "application/octet-stream",
"uploadType" => "media"));
我已经仔细检查了我传递的所有变量,他们正在发送正确的信息。
所以这是我的问题。如果我的所有GET
请求都没有问题,为什么我的POST
请求会出错?我无法判断这是我的代码或API console中的设置是错误的。任何人都可以引导我朝着正确的方向前进吗?
修改 这是生成的错误代码(减去可识别位)。
Fatal error: Uncaught exception 'Google_ServiceException' with message
'Error calling POST https://www.googleapis.com/upload/analytics/v3/man
agement/accounts/1234567/webproperties/UA-1234567-1/customDataSources/
xXxXxX/dailyUploads/2013-01-17/uploads?appendNumber=1&type=cost&reset=
true&uploadType=media&key=xXxXxX: (401) Invalid Credentials' in /../pub
lic_html/proj/google-api-php-client/src/io/Google_REST.php:66 Stack tra
ce: #0 /../public_html/proj/google-api-php-client/src/io/Google_REST.ph
p(36): Google_REST::decodeHttpResponse(Object(Google_HttpRequest)) #1 /
../public_html/proj/google-api-php-client/src/service/Google_ServiceRes
ource.php(186): Google_REST::execute(Object(Google_HttpRequest)) #2 /..
/public_html/proj/google-api-php-client/src/contrib/Google_AnalyticsSer
vice.php(82): Google_ServiceResource->__call('upload', Array) #3 /../pu
blic_html/proj/dailyUpload_send.php(60): Google_ManagementDailyUploadsS
erviceResource->upload('1234567', 'UA-1234567-1', 'xXxXxXxXxXxXxXx...',
' in /../public_html/proj/google-api-php-client/src/io/Google_REST.php
on line 66
答案 0 :(得分:4)
我刚刚第一次成功上传了费用数据。在使用Nicholas Pickering交换评论时,我遇到了Management API Authorization的文档,其中指出:
如果您的
401
已过期,或者您使用了错误的API范围,您将获得access_token
状态代码。
范围的默认值是只读的,这就是为什么我的所有GET
请求都没有遇到任何困难,但我无法通过API完成任何POST
请求。我不记得我是如何找到它的,但在PHP客户端库中完成此操作的方法是将以下行附加到客户端声明:
$client->setScopes('https://www.googleapis.com/auth/analytics');
只要我将该行添加到项目中,我就能成功上传费用数据。我非常很高兴清除了这个障碍。我还有很长的路要走完成我的项目,但至少我知道它会起作用。
答案 1 :(得分:0)
我一直在设置此错误,直到我转到Google控制台 - > API& auth - > API并启用了此API用法。