Доступ к данным с помощью Google AdSense Management API

Я пытаюсь получить данные из учетной записи AdSense через API управления AdSense.

Я успешно получил данные с помощью Google API Explorer при подключении к моей учетной записи AdSense.

Сейчас я пытаюсь получить эти данные из сценария PHP, который будет запущен в crontab.

Я понимаю, что мне нужно Service account который я создал и сгенерировал файл json.

Следующий код завершается ошибкой, если я пытаюсь использовать файл json с двумя разными ошибками:

  1. если я использую setSubject с владельцем учетной записи AdSense:
    «ошибка»: «неавторизованный_клиент»,
    «error_description»: «Клиент не авторизован для получения токенов доступа с помощью этого метода.»

  2. Если я комментирую setSubject:
    «причина»: «noAdSenseAccount»,
    «сообщение»: «У пользователя нет учетной записи 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('[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);

2-я попытка с OAuth

Я создал учетную запись OAuth в https://console.cloud.google.com/apis/credentials/oauthclient/. Когда я проверяю AdSense API, моя учетная запись появляется в списке авторизованных пользователей в https://console.cloud.google.com/apis/api/adsense.googleapis.com/overview.

Я скачал соответствующий JSON и изменил свой код, но он по-прежнему говорит:

  • «достаточное количество разрешений», если я установил $ 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);

0

Решение

unauthorized_client

Означает, что пользователь, с которым вы выполняете аутентификацию, не имеет доступа к учетной записи Adsence, к которой вы пытаетесь получить доступ.

Сервисная поддержка аккаунта

Существует ряд API Google, которые не поддерживают учетные записи служб. Наиболее заметно было бы API YouTube, у которого даже нет способа поделиться своим аккаунтом с другим пользователем.

Есть и другие, которые позволят вам поделиться своими данными с другим пользователем, но требуют, чтобы данный пользователь ответил на уведомление по электронной почте. Blogger — это одно, а Adsence — другое.

Решение

Вам нужно будет пройти аутентификацию с помощью Oauth2, используя пользователя, который имеет доступ к соответствующей учетной записи Adsence. Аутентифицируйте свой код после сохранения токена обновления и используйте токен обновления для запроса нового токена доступа в вашем задании cron.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]