0

我正在使用 Google App Script 示例将数据导入此页面上的 Google Spreadsheet App Script 中。 该示例工作正常,但我想更改它正在提取数据的网络属性。

我四处寻找示例并尝试了他们的示例代码的各种迭代,但我没有得到正确的结果。有人可以用这段代码帮助我如何更改它以在我的个人资料中提取不同的属性吗?

    function runDemo() {
    try {

        var firstProfile = getFirstProfile();
        var results = getReportDataForProfile(firstProfile);
        outputToSpreadsheet(results);

    } catch (error) {
        Browser.msgBox(error.message);
    }
}

function getFirstProfile() {
    var accounts = Analytics.Management.Accounts.list();
    if (accounts.getItems()) {
        var firstAccountId = accounts.getItems()[0].getId();

        var webProperties = Analytics.Management.Webproperties.list(firstAccountId);
        if (webProperties.getItems()) {

            var firstWebPropertyId = webProperties.getItems()[0].getId();
            var profiles = Analytics.Management.Profiles.list(firstAccountId, firstWebPropertyId);

            if (profiles.getItems()) {
                var firstProfile = profiles.getItems()[0];
                return firstProfile;

            } else {
                throw new Error('No profiles found.');
            }
        } else {
            throw new Error('No webproperties found.');
        }
    } else {
        throw new Error('No accounts found.');
    }
}
4

1 回答 1

1

如果您参考分析服务文档,您会发现所有.getItems()方法都返回“...的列表”或数组。请注意,该示例始终引用每个数组的第一项,[0]. 因此,您只需要遍历返回的数组即可获取所有内容。

您提到的函数的这个修改版本就是这样做的,构建然后返回一个allProfiles. (需要对示例的其余部分进行相应的更改才能完成此数据的报告。)

function getAllProfiles() {
    var accounts = Analytics.Management.Accounts.list();
    var allProfiles = [];
    if (accounts.getItems()) {
      for (var acct in accounts.getItems()) {
        var accountId = accounts.getItems()[acct].getId();

        var webProperties = Analytics.Management.Webproperties.list(accountId);
        if (webProperties.getItems()) {
          for (var prop in webProperties.getItems()) {
            var webPropertyId = webProperties.getItems()[prop].getId();
            var profiles = Analytics.Management.Profiles.list(accountId, webPropertyId);

            if (profiles.getItems()) {
              for (var item in profiles.getItems()) {
                var profile = profiles.getItems()[item];
                Logger.log(profile);
                allProfiles.push(profile);
              }
            } else {
                Logger.log('No profiles found [webProperty="'
                  +webProperties.getItems()[prop].getName()
                  +'"]');
            }
          }
        } else {
            Logger.log('No webproperties found [account="'
              +accounts.getItems()[acct].getName()
              +'"]');
        }
      }
    } else {
        Logger.log('No accounts found.');
    }
    return allProfiles;
}

或者,如果您确切地知道您想要什么,只需更改索引值,这些都[0]在示例中,引用第一个帐户的第一个 Webproperties 列表中的第一项。

于 2013-03-26T04:49:58.293 回答