Я пытаюсь получить данные из API фондовой биржи AlphaVantage с помощью этого кода:
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.
@Hotzen Возможно, вы часто запускали функцию или api действительно возвращает что-то еще (попробуйте Console.log(jsonvix)
). Кроме того, вы раньше размещали свой апики в открытом доступе -> Кто-то еще (или несколько других) тоже может его использовать.
У меня было ощущение, что проблема связана с лимитом вызовов, но я думал, что этот код сделает только 1 вызов. Лимит для api - 5 вызовов в минуту. Так что это не должно быть проблемой. Возможно ли, что скрипт в некоторых случаях делает здесь многочисленные вызовы?