google-apps-script - Google 脚本和 Alphavantage json 查询:TypeError:无法读取属性
问题描述
我尝试使用以下代码从 AlphaVantage 股票市场 API 获取数据:
function importjson (){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("daily data");
var day = new Date(),
MILLIS_PER_DAY = 1000 * 60 * 60 *`enter code here` 24;
var urlvix = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=xlb&apikey=KEY", responsevix = UrlFetchApp.fetch(urlvix),
jsonvix = JSON.parse(responsevix);
// var date = jsonvix["Meta Data"]["3. Last Refreshed"];
var yesterday = Utilities.formatDate(new Date(day.getTime() - MILLIS_PER_DAY), "GMT+1", "yyyy-MM-dd"),
curdate = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd");
var open = jsonvix["Time Series (Daily)"][curdate]["5. adjusted close"],
close = jsonvix["Time Series (Daily)"][curdate]["1. open"],
volumetoday = jsonvix["Time Series (Daily)"][curdate]["6. volume"],
volumeyesterday = jsonvix["Time Series (Daily)"][yesterday]["6. volume"];
// Logger.log(date);
Logger.log(curdate);
Logger.log(yesterday);
if (volumetoday > (volumeyesterday + volumeyesterday*1.1) ){
Logger.log("distribution");
}
else {
Logger.log("keine distribution")
};
Logger.log("open: " + open);
Logger.log("close: " + close);
Logger.log("Today´s volume: " + volumetoday);
Logger.log("Yesterday´s volume: " + volumeyesterday);
}
有时,当我运行代码时,会出现此错误:
TypeError: Cannot read property "2018-09-13" from undefined. (Zeile 17, Datei "Libary")
或者如果我使用var date = jsonvix["Meta Data"]["3. Last Refreshed"];
`TypeError: Cannot read property "["3. Last Refreshed"]" from undefined.` (Zeile 17, Datei "Libary")
Json 是这样的:
Meta Data
1. Information "Daily Time Series with Splits and Dividend Events"
2. Symbol "MSFT"
3. Last Refreshed "2018-09-13 13:37:27"
4. Output Size "Compact"
5. Time Zone "US/Eastern"
Time Series (Daily)
2018-09-13
1. open "112.1200"
2. high "113.7250"
3. low "112.1200"
4. close "112.8050"
5. adjusted close "112.8050"
6. volume "14261782"
7. dividend amount "0.0000"
8. split coefficient "1.0000"
问题是,我每次运行代码时都不会出现错误,这使得它有点不可靠。
这段代码有什么问题吗?
谢谢
解决方案
API 并不总是返回您发布的 JSON。有时它会返回:
{
"Information":
"Thank you for using Alpha Vantage! Please visit https://www.alphavantage.co/premium/ if you would like to have a higher API call volume."
}
如您所见,这里没有["Meta Data"]
或["Time Series"]["2018-09-13"]
关键。唯一的关键是["Information"]
。
因此,当您用完配额时,jsonvix["Meta Data"]
将返回。Undefined
您需要编写代码来缓慢调用和/或在等待几秒钟后重新获取,使用Utilities.sleep()
AlphaVantage 或选择更高的音量。
参考:
推荐阅读
- c# - Xamarin Forms 使详细视图可编辑
- android - 在多个线程中同时从 Litedb 集合中读取数据时获取 SIGSEGV
- html - 无法将一些损坏的链接变成合格的链接
- python-3.x - 我有不同的 python 版本,我正在使用哪个版本?
- javascript - POST 请求在邮递员中有效,但在浏览器中无效
- docker - 重新启动 auditd 服务会导致依赖错误
- javascript - cancleAnimationFrame 没有停止动画循环
- excel - 在列表框中显示超过 10 列的数据
- javascript - 未捕获的引用错误:未定义 JSZip
- java - 等待对象监视器是什么意思