Javascript 缺少分析API(应用程序脚本)文档?|&引用;getItems";vs";项目“;以及其他问题

Javascript 缺少分析API(应用程序脚本)文档?|&引用;getItems";vs";项目“;以及其他问题,javascript,google-apps-script,google-analytics,google-analytics-api,Javascript,Google Apps Script,Google Analytics,Google Analytics Api,大家好(提前谢谢你们的帮助)!我真的很想知道分析API(管理API): 谷歌工作表/应用程序脚本/分析 我在谷歌工作,所以我使用应用程序脚本来提取数据。应用程序脚本的文档本身是不言自明的,但分析管理API与应用程序脚本的结合似乎没有任何内容。到目前为止,我一直在关注Javascript示例,以了解一些细节 隐藏函数? 然而,我在各种示例中找到了许多可用的函数,但在文档中却找不到。例如: var properties = Analytics.Management.Webproperties.lis

大家好(提前谢谢你们的帮助)!我真的很想知道分析API(管理API):

谷歌工作表/应用程序脚本/分析 我在谷歌工作,所以我使用应用程序脚本来提取数据。应用程序脚本的文档本身是不言自明的,但分析管理API与应用程序脚本的结合似乎没有任何内容。到目前为止,我一直在关注Javascript示例,以了解一些细节

隐藏函数? 然而,我在各种示例中找到了许多可用的函数,但在文档中却找不到。例如:

var properties = Analytics.Management.Webproperties.list(AcountID);
var webPropertyIdOfFirstElement = properties.getItems()[0].getId();
将返回第一个元素的ID

文档 但是,根据本文档(Javascript)

实际代码(返回相同的代码)应为:

var results = Analytics.Management.Webproperties.list(accountID);
var properties = results.items;
var property = properties[0];
var theID = property.id;
哪里 所以我的问题是功能在哪里

getItems()[X] and .getId()
这些不是javascript内置函数吗?有什么我一直丢失的秘密文件吗?我真的很想知道

以及(与示例中的上述页面相同)。有人能解释一下“执行”功能吗。老实说,我以前从未见过这种情况。这是怎么回事

function listProperties() {
  var request = gapi.client.analytics.management.webproperties.list({
    'accountId': '123456'
  });
  request.execute(printProperties);
}

function printProperties(results) { //do stuff }
??“执行”并将函数作为参数传递?嗯?

这个答案怎么样

对问题1的答复:
  • 您想知道
    var res=Analytics.Management.Webproperties.list(AcountID)
    res.getItems()[0].getId()之间的差异
以下脚本的
value1
value2
是相同的。但是
items
getItems
分别是键和函数

var res = Analytics.Management.Webproperties.list(AcountID);
var value1 = res.items[0].id;
var value2 = res.getItems()[0].getId();
似乎可以通过将
get
添加到顶部并将其作为函数运行来检索每个值。函数名必须是驼峰大小写

但是我在官方文件和脚本编辑器的完成功能中找不到这样的功能。所以我认为这些函数可能是隐藏函数

在Advanced Google Services中,我们可以通过脚本编辑器的完成功能确认创建API请求主体的功能。但是,尽管无法找到用于检索值的函数,但这些函数可以用作隐藏方法。这样的函数也可以确认其他API存在这样的隐藏方法

其他情况: 例如,与其他情况一样,在Sheets API中,您可以在以下脚本中看到隐藏函数

var r = Sheets.Spreadsheets.Values.batchGet(spreadsheetId, {ranges: ["Sheet1", "Sheet2"]});

var value1a = r.spreadsheetId;
var value1b = r.getSpreadsheetId();

var value2a = r.valueRanges;
var value2b = r.getValueRanges();
var r = Sheets.Spreadsheets.Values.batchGet(spreadsheetId, {ranges: ["Sheet1", "Sheet2"]});
Logger.log(typeof r.getSpreadsheetId)
Logger.log(typeof r.getValueRanges)
在这种情况下,
value1a
value1b
是相同的。而且
value2a
value2b
也是相同的。为了确认是否可以使用
getSpreadsheetId()
getValueRanges()
,我使用以下脚本

var r = Sheets.Spreadsheets.Values.batchGet(spreadsheetId, {ranges: ["Sheet1", "Sheet2"]});

var value1a = r.spreadsheetId;
var value1b = r.getSpreadsheetId();

var value2a = r.valueRanges;
var value2b = r.getValueRanges();
var r = Sheets.Spreadsheets.Values.batchGet(spreadsheetId, {ranges: ["Sheet1", "Sheet2"]});
Logger.log(typeof r.getSpreadsheetId)
Logger.log(typeof r.getValueRanges)
如果它可以用作函数,日志将显示
函数
。如果不能将其用作函数,则返回
未定义的

对问题2的答复:
  • 您想了解google api javascript客户端的
    execute()
我认为答案可以在网站上看到

Completed promise值的
result
参数相当于的回调中的第一个参数。要更新代码以使用承诺,请按照下面的前后示例中所示更改代码

以下示例显示如何使用回调:

gapi.client.request({
  'path': 'plus/v1/people',
  'params': {'query': name}
 }).execute(function(resp, rawResp) {
   processResponse(resp);
 });
您可以重写上面显示的示例,使用如下承诺:

gapi.client.request({
  'path': 'plus/v1/people',
  'params': {'query': name}
 }).then(function(resp) {
   processResponse(resp.result);
 });
参考资料:

如果我误解了你的问题,而这不是你想要的答案,我深表歉意。

非常感谢你抽出时间写下如此详细的答案!非常感谢
Logger.log(typeof var.function)
对于确定是否存在用于检索对象属性的“隐藏”函数非常有用。直到现在我才知道这件事。从现在起,我可能会经常使用它:)也谢谢你给我指出承诺。“我们将对此进行更详细的调查。”sebieire感谢您的回复。我很高兴你的问题解决了。也谢谢你。