Как получить данные из нескольких учетных записей Google Analytics с помощью Google API?

#php #google-analytics #google-api #google-analytics-api #google-api-php-client

#php #google-analytics #google-api #google-analytics-api #google-api-php-client

Вопрос:

У меня есть веб-приложение, которое предоставляет своим пользователям возможность предоставлять ему автономный доступ к учетной записи пользователя Google Analytics. Проблема, с которой я сталкиваюсь, заключается в том, что когда мне нужно выводить данные из нескольких учетных записей Google Analytics одновременно. Когда я обновляю токен доступа для каждого пользователя и пытаюсь извлечь данные, я всегда получаю данные из первого сохраненного токена доступа.

Ниже приведен пример PHP-кода, который перебирает 2 токена обновления, создает и устанавливает токены доступа для каждого и извлекает идентификаторы профиля, к которым у каждого пользователя есть доступ. Поскольку я сбрасываю токен доступа в цикле, я ожидал бы, что он будет выводить профили, к которым у каждого пользователя есть доступ, но вместо этого он выводит профили, к которым первый пользователь имеет доступ дважды. Аналогично, если я изменю цикл, чтобы начать со второго токена обновления, профили, к которым имеет доступ второй пользователь, печатаются дважды:

 $refresh_token1 = "123";
$refresh_token2 = "456";

foreach(array($refresh_token1,$refresh_token2) as $r){
    $access_token = array( "access_token" => "", "token_type" => "Bearer", "expires_in" => 0, "refresh_token" => $r, "created" => 0 );
    $client->setAccessToken($access_token);

    $analytics = new Google_Service_Analytics($client);
    $obj = $analytics->management_profiles->listManagementProfiles('~all', '~all');
    if (count($obj->getItems()) > 0) {
        $items = $obj->getItems();
        foreach($items as $item){
            echo $item->getId()."<BR>";
        }
    }
}
  

Я также пытался вызвать команду «$ client-> refreshToken ($ r)» после первого цикла, но, похоже, это тоже не работает.

Комментарии:

1. убедитесь, что вы также обновляете токен обновления в клиенте. Клиентская библиотека автоматически предоставит вам новый токен доступа, если это необходимо, используя имеющийся у нее токен обновления.

2. @DaImTo, разве это не то, что делает вызов $ client-> setAccessToken ($access_token)?

Ответ №1:

Обновления токена доступа недостаточно. Необходимо создать новый клиент в цикле, чтобы извлекать уникальные данные для каждого пользователя. Вот обновленная версия кода, который будет работать:

 $refresh_token1 = "123";
$refresh_token2 = "456";

foreach(array($refresh_token1,$refresh_token2) as $r){

    $client = new Google_Client();
    $client->setAuthConfig(__DIR__ . '/client_secrets.json');
    $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);

    $access_token = array( "access_token" => "", "token_type" => "Bearer", "expires_in" => 0, "refresh_token" => $r, "created" => 0 );
    $client->setAccessToken($access_token);

    $analytics = new Google_Service_Analytics($client);
    $obj = $analytics->management_profiles->listManagementProfiles('~all', '~all');
    if (count($obj->getItems()) > 0) {
        $items = $obj->getItems();
        foreach($items as $item){
            echo $item->getId()."<BR>";
        }
    }
}