AdSense Management APIを使用してAdSenseアカウントからデータを取得しようとしています。Google AdSense Management APIを使用してデータにアクセスする -
AdSense APIに接続しているときにGoogle API Explorerを使用してデータを正常に取得しました。
私は現在、このデータをcrontabで実行されるPHPスクリプトから取得しようとしています。
私が作成したService account
が必要で、私はjsonファイルを生成しました。
私は2つの異なるエラーでJSONファイルを使用しようとすると、次のコードは失敗します。 「エラー」:私はAdSenseアカウントの所有者とsetSubjectを使用する場合
「unauthorized_client」、 "error_description": "クライアントはこのメソッドを使用してアクセストークンを取得する権限がありません。
「理由」: 「理由」:「noAdSenseAccount」、 「メッセージ」:「ユーザーにはAdSenseアカウントがありません」
コード:私はhttps://console.cloud.google.com/apis/credentials/oauthclient/でのOAuthアカウントを作成したのOAuth
と
<?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('[email protected]');
$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);
第二の試み。 AdSense APIを確認すると、承認されたユーザーのリストに自分のアカウントがhttps://console.cloud.google.com/apis/api/adsense.googleapis.com/overviewと表示されます。
私は、対応するJSONをダウンロードして自分のコードを変更し、それはまだ言いました:
- 「insufficientPermissionsを」私は$クライアント - > 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アカウントを持つユーザーで認証する必要のあるアカウントがありません。 – DaImTo
ありがとうございます。それは、私がAdSenseアカウントの所有者のメールでsetSubjectを使用するときにやろうとしていることです。サービスアカウント以外のものを使用する必要がありますか? –
setSubjectは、サービスアカウントで認証するときにユーザーを偽装するために使用されます。サービスアカウントがユーザーのAdSenseアカウントにアクセスできることを確認してください – DaImTo