Как получить доступ к данным пользователя с помощью Google Webmaster Tools API

Я только начинаю использовать библиотеки API от Google, и у меня возникают некоторые проблемы с доступом к пользовательским данным. Для экспериментов я использовал код из предыдущего вопроса в этой области.
Мой код выполняет петицию для API консоли поиска Google, но возвращает пустой массив. Я авторизовал сервисную учетную запись из консоли администратора (https://developers.google.com/identity/protocols/OAuth2ServiceAccount) поэтому я не знаю, почему он ничего не возвращает.

set_include_path(get_include_path() . PATH_SEPARATOR . '$path/google-api-php-client-master/src');
require_once realpath('$path/google-api-php-client-master/src/Google/autoload.php');

$client_id = "my-client-id";
$service_account_name = "[email protected]";
$key_file_location = "privatekey.p12";

$client = new Google_Client();
$client->setApplicationName("WMtools_application");
$service = new Google_Service_Webmasters($client);

if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/webmasters.readonly'),
$key
);
try{
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();
}catch(Exception $e){
echo "Exception captured",  $e->getMessage(), "\n";
}
try{
$results = $service->sites->listSites();

$siteList = $results->siteEntry;

var_dump($siteList);
}catch(Exception $e2){
echo "No results",  $e2->getMessage(), "\n";
}

0

Решение

Я решил проблему. Дело в том, что я делегировал полномочия по всему домену своей учетной записи службы, и я не включил в свою петицию API адрес электронной почты пользователя, от которого я хочу получить доступ к данным. Чтобы решить это просто нужно добавить его в google_Auth_AssertionCredentials следующим образом:

$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/webmasters.readonly'),
$key
);
$cred->sub = $service_account_user_email; //[email protected]
1

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

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

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