Блог им. drbuzz

JS cкрипт для проверки значения котировки с API Московской биржы прямо в Браузере

    • 09 января 2019, 18:17
    • |
    • DRBUZZ
  • Еще

Раз тут можно про скрипты и это сам Тимофей Мартынов всем подписчикам канала Smart-Lab в Telegram рассылает...

Предложу еще один скрипт который можно использовать для проверки последней цены котировки с Московской биржи прямо из любого современного браузера. 

Сам скрипт:

Объявление функции

async function moexTickerLast(ticker) {
  const json = await fetch('https://iss.moex.com/iss/engines/stock/markets/shares/securities/' + ticker + '.json').then(function(res) { return res.json()});
  return json.marketdata.data.filter(function(d) { return ['TQBR', 'TQTF'].indexOf(d[1]) !== -1; })[0][12];
}

Вызов функции

moexTickerLast('GAZP').then(console.log);

Что бы использовать в браузере нужно открыть браузерную JavaScript консоль объявить и использовать функцию там (см. скриншот):

JS cкрипт для проверки значения котировки с API Московской биржы прямо в Браузере



Скрипт можно использовать не только в браузере, но и например написать расширение для браузера или функцию для Excel в Google Docs

JS cкрипт для проверки значения котировки с API Московской биржы прямо в Браузере

Эта функция работает с богатыми данными API Московской биржи, как ими распоряжаться и какие поля данных читать можете решить сами.

Дерзайте!

★33
14 комментариев
а как функцию moexTickerLast в гугл докс вставить?

Тимофей Мартынов, Там не так тривиально как в браузере. Путь примерно такой: Инструменты>Редактор скриптов 

Язык немного для апи excel отличается.

function moexTickerLast(ticker) {
var json = UrlFetchApp.fetch('https://iss.moex.com/iss/engines/stock/markets/shares/securities/' + ticker + '.json');
return JSON.parse(json).marketdata.data.filter(function(d) { return ['TQBR', 'TQTF'].indexOf(d[1]) !== -1; })[0][12];
}


Разница в методе UrlFetchApp.fetch 

А дальше:

habr.com/post/215843/

developers.google.com/apps-script/overview

avatar
DRBUZZ, Круто, спасибо!

Так это можно легко и быстро сделать интерактивный портфель
avatar
DRBUZZ, я правильно понимаю, что данные всё таки он с 15 минутной задержкой берёт?
avatar
ANTI_Finsov, задержка присутствует 
avatar
в google-docs: инструменты -> редактор скриптов

function getPrice(ticker) {
    var response = UrlFetchApp.fetch("https://iss.moex.com/iss/engines/stock/markets/shares/securities/"+ticker+".json" );
    var w = JSON.parse(response.getContentText());
    data =w.securities.data
    for (var i = 0; i < data.length; i++) {
      if (data[i][1] == "TQBR") {
        return data[i][3]
      }
    }
  
  return 0
}

И далее используется, как обычная формула вида
=getPrice("BANEP")
avatar

В Гугл докс можно котировки без скриптов подтягивать: 
=GOOGLEFINANCE(«AAPL»; «price»)

или для мос. биржи:
=GOOGLEFINANCE(«MCX:LKOH»; «price»)

(только кавычки другие, СЛ заменил их)

А iss.moex.com дает котировки в реальном времени или там задержка 15 сек?

avatar

Dmitryy, GOOGLEFINANCE не умеет с нашими префами работать. Проверь SNGSP 

Апи биржи с задержкой, только для особых клиентов без задержки

avatar
DRBUZZ, вы правы, SNGS и не преф вообще не видит. Но думаю должен быть костыль, надо гуглить.

avatar
DRBUZZ, не подскажите как данный скрипт использовать в Excel? Буду очень признателен!
avatar

А вот вариант как Free API Мосбиржи использовать в гугл таблицах: https://habr.com/post/486716/

avatar
Взято отсюда moex api
avatar
Народ что то не могу разобраться. Как получить через скрипт режим торгов. Как получить котировку я понял.
function getA(tt,ticker) {
  var bn = "bonds";
  var sr ="shares";
  if (tt=="TQOB"){ var pr = bn}
  else if(tt=="EQOB"){ var pr = bn}
  else if(tt=="TQOD"){ var pr = bn}
  else if(tt=="TQCB"){ var pr = bn}
  else if(tt=="EQQI"){ var pr = bn}
  else if(tt=="TQIR"){ var pr = bn}
  else if(tt=="TQTF"){ var pr = sr}
  else if(tt=="TQBR"){ var pr = sr}
  else if(tt=="SNDX"){ var pr = sr}
  else if(tt=="TQIF"){ var pr = sr}
  else if(tt=="TQTD"){ var pr = sr};
    var response = UrlFetchApp.fetch("https://iss.moex.com/iss/engines/stock/markets/"+pr+"/securities/"+ticker+".json" );
    var w = JSON.parse(response.getContentText());
    data =w.securities.data
    for (var i = 0; i < data.length; i++) {
      if (data[i][1] == tt) {
        return data[i][3]
      }
    }
  
  return 0

 
 
 }

Где tt это режим торгов, а ticker это тикер акции. Так вот вопрос как получить в эту функцию режим торгов? Хотелось бы указывать только тикер инструмента.
Все разобрался. Спасибо за скрипт.

function getAA(ticker) {
    

    var response2 = UrlFetchApp.fetch("https://iss.moex.com/iss/securities/HYDR.json" );
    var tt = JSON.parse(response2.getContentText());
    var data2 =tt.boards.data
    for (var t = 0; t < data2.length; t++) {
      if (data2[t][0] == "HYDR") {
         var data2 = data2[t][1]
      }
    
    }
  var bn = "bonds";
  var sr ="shares";
  if (data2=="TQOB"){ var pr = bn}
  else if(data2=="EQOB"){ var pr = bn}
  else if(data2=="TQOD"){ var pr = bn}
  else if(data2=="TQCB"){ var pr = bn}
  else if(data2=="EQQI"){ var pr = bn}
  else if(data2=="TQIR"){ var pr = bn}
  else if(data2=="TQTF"){ var pr = sr}
  else if(data2=="TQBR"){ var pr = sr}
  else if(data2=="SNDX"){ var pr = sr}
  else if(data2=="TQIF"){ var pr = sr}
  else if(data2=="TQTD"){ var pr = sr};
    var response = UrlFetchApp.fetch("https://iss.moex.com/iss/engines/stock/markets/"+pr+"/securities/"+ticker+".json" );
    var w = JSON.parse(response.getContentText());
    data =w.securities.data
    for (var i = 0; i < data.length; i++) {
      if (data[i][1] == data2) {
        return data[i][3]
      }
    }
  
  return 0

 
 
 }

теги блога DRBUZZ

....все тэги



UPDONW
Новый дизайн