Google Analytics会从凭据中获取所有个人资料ID

时间:2016-11-07 10:58:43

标签: php google-analytics

我的Google Analytics仪表板小部件已准备就绪,我需要做的最后一件事就是提高性能。

我为服务帐户凭据创建了一个文件上传,以便用户可以将其移动到服务器,之后他应该决定他/她想要跟踪哪个项目,就像这里https://ga-dev-tools.appspot.com/embed-api/basic-dashboard/但我只想创建一个选择所有项目所在的领域。

我通过ajax请求上传凭据,并希望返回包含所有配置文件ID的json对象。问题是:只要有超过40个帐户/属性/视图连接到帐户,我就会收到异常,因为加载时间超过30秒。

这是代码,但它太慢或者我犯了什么错误?

public function getProfileIDs($analytics, $boolGetSelectionList = false){
    $arrProfileIds = [];
    $arrSelectionList = array();
    $accounts = $analytics->management_accounts->listManagementAccounts();
    if (count($accounts->getItems()) > 0) {
        $items = $accounts->getItems();
        foreach ($items as $item) {
            $arrAccountName[] = $item->getName();
            $arrAccountIds = array();
            $arrAccountIds[] = $item->getId();
            foreach ($arrAccountIds as $accountId) {
                $arrProperties = array();
                $arrProperties[] = $analytics->management_webproperties->listManagementWebproperties($accountId);
                foreach ($arrProperties as $property) {
                    if (count($property->getItems()) > 0) {
                        $propertyItems = $property->getItems();
                        foreach ($propertyItems as $propertyItem) {
                            $propertyId = $propertyItem->getId();
                            $profiles = $analytics->management_profiles->listManagementProfiles($accountId, $propertyId);
                            if (count($profiles->getItems()) > 0) {
                                $profileitems = $profiles->getItems();
                                foreach ($profileitems as $profileItem){
                                    $arrProfileIds[] = $profileItem->getId();
                                    $arrSelectionList[] = array(
                                        'URL' => $profileItem['websiteUrl'],
                                        'name' => $profileItem['name'],
                                        'profileID' => $profileItem->getId(),
                                        'replacedURL' => str_replace('http://', '', $profileItem['websiteUrl']) . " " . $profileItem['name']
                                    );
                                }
                            } else {
                                throw new Exception(Craft::t("Ungültiger Credential - keine Views gefunden"));
                            }
                        }
                    } else {
                        throw new Exception(Craft::t("Ungültiger Credential - keine Properties gefunden"));
                    }
                }
            }
        }
    } else {
        throw new Exception(Craft::t("Ungültiger Credential - keine Accounts gefunden"));
    }
    return $arrSelectionList;
}

我知道理解它有点棘手,但为了简单起见,这段代码只是循环遍历整个帐户并搜索所有项目,属性等,以查找连接到服务帐户凭据并保存的所有配置文件ID $arrSelectionList中所需的值,但在某些时候它变得太慢,我不知道如何使它更快。

您能否帮助我并让我的代码更快或告诉我是否有更好的方法来获取所有个人资料ID?

非常感谢你

1 个答案:

答案 0 :(得分:1)

很难说,但看起来你正在对api的不同部分进行大量调用。

使用account summaries您的代码很慢,因为您向api发出了这么多请求。帐户摘要将返回所有帐户及其关联的网络媒体资源和个人资料。对于此实例中当前经过身份验证的用户,请使用服务帐户。只需拨打一次Google Analytics管理API即可。