Скрипты Google и Alphavantage JSON-запрос: TypeError: Не удается прочитать свойство - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь получить данные из 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"

Дело в том, что я не получаю ошибку каждый раз, когда просто запускаю код, что делает его ненадежным.

Есть ли проблема с мэром в этом коде?

Спасибо

1 Ответ

0 голосов
/ 13 сентября 2018

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.

Ссылки:

...