2017-05-31 16 views
0

AdSense Management APIを使用してAdSenseアカウントからデータを取得しようとしています。Google AdSense Management APIを使用してデータにアクセスする -

AdSense APIに接続しているときにGoogle API Explorerを使用してデータを正常に取得しました。

私は現在、このデータをcrontabで実行されるPHPスクリプトから取得しようとしています。

私が作成したService accountが必要で、私はjsonファイルを生成しました。

私は2つの異なるエラーでJSONファイルを使用しようとすると、次のコードは失敗します。 「エラー」:私はAdSenseアカウントの所有者とsetSubjectを使用する場合

  1. 「unauthorized_client」、 "error_description": "クライアントはこのメソッドを使用してアクセストークンを取得する権限がありません。

  2. 「理由」: 「理由」:「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); 
+0

認証するユーザーには、adSenceアカウントを持つユーザーで認証する必要のあるアカウントがありません。 – DaImTo

+0

ありがとうございます。それは、私がAdSenseアカウントの所有者のメールでsetSubjectを使用するときにやろうとしていることです。サービスアカウント以外のものを使用する必要がありますか? –

+0

setSubjectは、サービスアカウントで認証するときにユーザーを偽装するために使用されます。サービスアカウントがユーザーのAdSenseアカウントにアクセスできることを確認してください – DaImTo

答えて

0

unauthorized_client

あなたとauthencatingているユーザーがアクセスしようとしているAdsenceアカウントへのアクセス権を持っていないことを意味します。

サービスアカウントのサポート

は、サービスアカウントをサポートしていないのGoogle APIがいくつかあります。最も顕著なのはYouTube APIで、他のユーザーとあなたのアカウントを共有する方法さえありません。

他のユーザーとあなたのデータを共有することができますが、そのユーザーが電子メール通知に応答することを要求するものがあります。 Bloggerは1つで、Adsenseは明らかに別のものです。

ソリューション

あなたが問題のadsenceアカウントへのアクセス権を持つユーザーを使用してのOAuth2を使用して認証する必要があります。一度リフレッシュトークンを保存してコードを認証し、リフレッシュトークンを使用してcronジョブ内の新しいアクセストークンを要求します。

関連する問題