更新:
将 data.context.dispatcher.stores.StreamDataStore.quoteData.item(code).regularMarketPrice.raw
更改为 data.context.dispatcher.stores.StreamDataStore.quoteData[code].regularMarketPrice.raw
后,我仍然收到错误消息 [21-06-23 14:47:53:398 PDT] TypeError: Cannot read property 'regularMarketPrice' of undefined at marketPrice(Code:6:91)
,当我尝试运行 Logger.log 时,它永远不会执行任何操作。此外,当我转到电子表格并使用公式 marketPrice("CL=F") 时,它会显示当前价格,但如果您等待一个小时并在下面的单元格中输入相同的公式,则会得到两个不同的价格。第一个公式没有更新的原因是什么。
旧: 这在最初几天工作正常,现在我收到一个类型错误:无法读取未定义的属性“regularMarketPrice”(第 6 行,文件“代码”)。在 Google 表格中,我使用公式 =marketPrice("CL=F")。
function marketPrice(code) {
var url='https://finance.yahoo.com/quote/'+code
var source = UrlFetchApp.fetch(url).getContentText()
var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
var data = JSON.parse(jsonString)
var regularMarketPrice = data.context.dispatcher.stores.StreamDataStore.quoteData.item(code).regularMarketPrice.raw
return regularMarketPrice
}
Object.prototype.item=function(i){return this[i]};
答案 0 :(得分:2)
我已经用这种方式从雅虎财经检索信息,效果很好,你可以在这里看到https://docs.google.com/spreadsheets/d/1zZhtvO74kE__k5N2VfbWypnfWt82lSwDkMKk9PL1bg4/copy
//Mike Steelson
Object.prototype.item=function(i){return this[i]};
function marketPrice(code) {
var url='https://finance.yahoo.com/quote/'+code
var source = UrlFetchApp.fetch(url).getContentText()
var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
var data = JSON.parse(jsonString)
var regularMarketPrice = data.context.dispatcher.stores.StreamDataStore.quoteData.item(code).regularMarketPrice.raw
return regularMarketPrice
}
此外,如果您想刷新数据,请选中或取消选中 B2 中的复选框。
=marketPrice(A2,$B$1)
您可以在脚本中使用它,如下所示:
function localTest(){
var code=('CL=F')
var market_Price = marketPrice(code)
Logger.log(market_Price)
}
答案 1 :(得分:1)
如以下评论中所述,当用户在 Apps 脚本中运行 TypeError
函数时会发生 marketPrice
。
据说,marketPrice
应该用作自定义函数,用户将函数名称输入到 Google Sheet 中带有参数的单元格中,然后 Google Sheet 将传递参数值到 Apps 脚本函数并执行它。
当用户直接向 Apps 脚本运行该函数时,code
中的 marketPrice(code){}
值将自动取消定义。
由于参数 code
未定义,脚本只能获取 https://finance.yahoo.com/quote/
,而 regularMarketPrice
没有数据。
强制您的脚本在 code
中具有价值。您可以使用默认参数值。
示例:
function marketPrice(code="CL=F") {
var url='https://finance.yahoo.com/quote/'+code
var source = UrlFetchApp.fetch(url).getContentText()
var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
var data = JSON.parse(jsonString)
var regularMarketPrice = data.context.dispatcher.stores.StreamDataStore.quoteData.item(code).regularMarketPrice.raw
return regularMarketPrice
}
Object.prototype.item=function(i){return this[i]};
注意:如果您将其用作自定义函数,这也将起作用。 Google 表格只会覆盖 code
的默认值。
对于不自动更新/刷新的自定义函数,您可以查看答案here。