【问题标题】:How to retrieve data from multiple Google Analytics accounts using Google API?如何使用 Google API 从多个 Google Analytics 帐户中检索数据?
【发布时间】:2016-10-23 13:53:54
【问题描述】:

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

下面是示例 PHP 代码,该代码循环遍历 2 个刷新令牌,为每个刷新令牌创建和设置访问令牌,并提取每个用户有权访问的配置文件 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->refreshToken($r)”命令,但这似乎也不起作用。

【问题讨论】:

  • 确保您也在更新客户端中的刷新令牌。如果需要,客户端库将使用它拥有的刷新令牌自动获取一个新的访问令牌。
  • @DaImTo,这不是 $client->setAccessToken($access_token) 调用的作用吗?

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


【解决方案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>";
        }
    }
}

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2014-03-23
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多