如何使用Google API从多个Google Analytics帐户中检索数据?

时间:2016-10-23 13:53:54

标签: php google-analytics google-api google-analytics-api google-api-php-client

我有一个网络应用程序,可让用户选择授予其离线访问用户的Google Analytics帐户的权限。我遇到的问题是,当我需要立即从多个Google Analytics帐户输出数据时。当我更新每个用户的访问令牌并尝试检索数据时,我总是从存储的第一个访问令牌中接收数据。

下面是循环浏览2个刷新令牌的示例PHP代码,为​​每个令牌创建和设置访问令牌,并提取每个用户有权访问的配置文件ID。由于我在循环中重置了访问令牌,我希望它能够输出每个用户有权访问的配置文件,而是输出第一个用户有权访问两次的配置文件。同样,如果我将循环更改为以第二个刷新令牌开头,则第二个用户访问的配置文件将打印两次:

$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-&gt; refreshToken($ r)”命令,但这似乎也不起作用。

1 个答案:

答案 0 :(得分: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>";
        }
    }
}