Sergey_Guryanov
@Sergey_Guryanov
Веб разработка

Как вывести котировки МосБиржи на график через API?

Есть скрипт графика акций, который нужно заполнить данными цены и даты так:

{ time: '2019-04-11', value: 80.01 },
{ time: '2019-04-12', value: 96.63 },
{ time: '2019-04-13', value: 76.64 },
{ time: '2019-04-14', value: 81.89 },
{ time: '2019-04-15', value: 74.43 },
//и т.д.


Данные я получаю в формате JSON через API Мосбиржи и в коде они выглядят так:
{ time: data['candles']['data'][1][7].split(' ')[0], value: data['candles']['data'][1][3]},
  { time: data['candles']['data'][2][7].split(' ')[0], value: data['candles']['data'][2][3]},
  { time: data['candles']['data'][3][7].split(' ')[0], value: data['candles']['data'][3][3]},
  { time: data['candles']['data'][4][7].split(' ')[0], value: data['candles']['data'][4][3]},
  { time: data['candles']['data'][5][7].split(' ')[0], value: data['candles']['data'][5][3]},
  { time: data['candles']['data'][6][7].split(' ')[0], value: data['candles']['data'][6][3]},

// т.е. всего один параметр в каждом значении должен увеличиваться на единицу при каждой итерации
//Функция split() обрезает строку с датой до нужного формата.

Выводя данные асинхронным fetch через document.write или console.log я получаю весь массив данных из 500 значений:
(async ()=>{
        let url = 'https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/SBER/candles.json?interval=24';
    fetch(url)
        let response = await fetch(url);
        let data = await response.json();
    for (start = 0; start < 500; start++) {
          console.log(data['candles']['data'][start][3]);
          document.write(data['candles']['data'][start][3]);
    }
        })();


Однако пытаясь сделать это в цикле для графика, я получаю на графике только последние значение массива:

(async() => {
        let url = 'https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/SBER/candles.json?interval=24&start=0';
        let response = await fetch(url);
        let data = await response.json();
        for (count = 0; count < 500; count++) {
          areaSeries.setData([ //функция скрипта графика
            {
              time: data['candles']['data'][count][7].split(' ')[0],
              value: data['candles']['data'][count][3]
            },
          ]);
        }
      })();


Подскажите каким образом я могу заполнить данными с этого API скрипт графика?
  • Вопрос задан
  • 296 просмотров
Решения вопроса 1
Babayka_od
@Babayka_od
Full-stack developer
Вы в цикле на каждой итерации устанавливаете новое значение из массива, нужно сначала сделать новый массив в нужном формате и уже потом установить данные для графика

(async () => {
	const url = "https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/SBER/candles.json?interval=24&start=0";
	const response = await fetch(url);
	const data = await response.json();

	const formattedData = data.candles.data.map(item => ({
		time: item[7].split(" ")[0],
		value: item[3]
	}));
	
  areaSeries.setData(formattedData)
})();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы