【发布时间】:2017-05-31 09:26:45
【问题描述】:
我正在尝试通过 AdSense Management API 从 AdSense 帐户中检索数据。
在连接到我的 AdSense 帐户后,我已使用 Google APIs Explorer 成功检索数据。
我现在正试图从将在 crontab 中运行的 PHP 脚本中获取这些数据。
我的理解是我需要一个 Service account 我创建并生成了一个 json 文件。
如果我尝试使用带有两个不同错误的 json 文件,以下代码将失败:
如果我将 setSubject 与 AdSense 帐户的所有者一起使用: “错误”:“未授权客户端”, "error_description": "客户端未经授权使用此方法检索访问令牌。"
如果我评论 setSubject : "原因": "没有 AdSense 帐户", "message": "用户没有 AdSense 帐户。"
代码:
<?php
require_once '../../vendor/autoload.php';
putenv('GOOGLE_APPLICATION_CREDENTIALS=../conf/Mercury-testlpstats.json');
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/adsense.readonly');
//$client->setSubject('AdTech@Lagardere-Pub.com');
$service = new Google_Service_AdSense($client);
$startDate = '2017-05-01';
$endDate = '2017-05-01';
$optParams = array(
'metric' => array('INDIVIDUAL_AD_IMPRESSIONS', 'EARNINGS'),
'dimension' => 'DATE',
'filter' => array('AD_UNIT_ID==ca-pub-XXXX:YYYY'),
'useTimezoneReporting' => true
);
$report = $service->accounts_reports->generate('pub-ZZZZZ', $startDate, $endDate, $optParams);
OAuth 的第二次尝试
我在https://console.cloud.google.com/apis/credentials/oauthclient/ 中创建了一个OAuth 帐户。当我检查 AdSense API 时,我的帐户出现在https://console.cloud.google.com/apis/api/adsense.googleapis.com/overview 的授权用户列表中。
我已经下载了相应的 JSON 并更改了我的代码,但它仍然显示:
- "insufficientPermissions" 如果我设置 $client->useApplicationDefaultCredentials();
- “需要登录”否则
require_once '../../vendor/autoload.php';
$client = new Google_Client();
$client->setAccessType('online');
$client->setAuthConfigFile('/home/al1/lpstats/conf/client_secret_725834039890-klbuc13f8089rjh7eis439b93n7sqqfv.apps.googleusercontent.com.json');
$client->addScope('https://www.googleapis.com/auth/adsense.readonly');
$service = new Google_Service_AdSense($client);
$startDate = '2017-05-01';
$endDate = '2017-05-01';
$optParams = array(
'metric' => array('INDIVIDUAL_AD_IMPRESSIONS', 'EARNINGS'),
'dimension' => 'DATE',
'filter' => array('AD_UNIT_ID==ca-pub-5035025648894332:3442683203'),
'useTimezoneReporting' => true
);
$report = $service->accounts_reports->generate('pub-5035025648894332', $startDate, $endDate, $optParams);
【问题讨论】:
-
与您进行身份验证的用户没有您需要向拥有 adSence 帐户的用户进行身份验证的帐户。
-
谢谢。这就是我在将 setSubject 与 AdSense 帐户所有者的电子邮件一起使用时尝试做的事情。我应该使用服务帐户以外的其他东西吗?
-
setSubject 用于在您使用服务帐户进行身份验证时模拟用户。确保服务帐户有权访问用户的广告帐户
-
我将服务帐户电子邮件添加到 AdSense 用户列表中,AdSense 告诉我已向该服务帐户电子邮件地址发送了一封电子邮件。但我不知道如何从服务帐户电子邮件地址中检索邮件。
-
我更新了我的问题,因为我尝试使用 OAuth 失败。到目前为止,没有成功。非常感谢您的帮助。
标签: php google-api google-oauth service-accounts adsense-api