Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Необходимо в 1С с сайта мосбиржи получить курс акции Яндекса YNDX

Необходимо в 1С с сайта мосбиржи получить курс акции Яндекса YNDX
Я
   VAVANSTR
 
07.10.21 - 01:03
Необходимо в 1С с сайта мосбиржи получить курс акции Яндекса YNDX

API и примеры кода на других языках
https://www.moex.com/a2193

////////////////////

Пример кода как с мосбиржи получают курсы валют


ИмяВходящегоФайла = ПолучитьИмяВременногоФайла("xml");
    
СерверИсточник="iss.moex.com";
    
НачалоПериода = Формат(ДатаНачала, "ДФ=yyyy-MM-dd");
КонецПериода = Формат(ДатаКонца, "ДФ=yyyy-MM-dd");
    
СтрокаПараметраПолучения = "iss/statistics/engines/currency/markets/fixing/USDFIXME.xml?from="+НачалоПериода+"&till="+КонецПериода+"%20";
    
HTTP = Новый HTTPСоединение(СерверИсточник);
HTTP.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла);
    
ВыбФайл = Новый Файл(ИмяВходящегоФайла);
Если ВыбФайл.Существует() Тогда    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ИмяВходящегоФайла);    
    Пока ЧтениеXML.Прочитать() Цикл          
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя="row" Тогда    
            Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
                
                НоваяСтрока = КурсыФиксинга.Добавить();
                Для Сч=0 По ЧтениеXML.КоличествоАтрибутов()-1 Цикл
                            
                    Если ЧтениеXML.ИмяАтрибута(Сч) = "tradedate" Тогда
                        НоваяСтрока.Дата = Дата(СтрЗаменить(ЧтениеXML.ЗначениеАтрибута(Сч),"-",""));
                    КонецЕсли;
                    Если ЧтениеXML.ИмяАтрибута(Сч) = "rate" Тогда
                        НоваяСтрока.Курс = ЧтениеXML.ЗначениеАтрибута(Сч);
                    КонецЕсли;
                    
                КонецЦикла;
                
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;    
КонецЕсли;
   VAVANSTR
 
1 - 07.10.21 - 01:05
Примеры http Запросов к сайту мосбиржы
https://iss.moex.com/iss/reference/
   VAVANSTR
 
2 - 07.10.21 - 01:10
Сам не могу сообразить как правильно составить ссылку к сайту МосБиржи
   Stephen Ordo
 
3 - 07.10.21 - 02:36
xml не нужен. :)

Функция ЗапросПолучитьДанные(АдресЗапроса, ПоляСДатами = "") 
    
    HTTPСоединение = Новый HTTPСоединение("iss.moex.com");
    Запрос = Новый HTTPЗапрос("/iss/" + АдресЗапроса);
    Попытка
        Ответ = HTTPСоединение.Получить(Запрос);
        Если Ответ.КодСостояния <> 200 тогда
            Возврат Неопределено;
        КонецЕсли;
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
        Данные = ПрочитатьJSON(Чтение, Ложь, ПоляСДатами);
        Чтение.Закрыть();
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Данные;
    
КонецФункции

Функция ОчиститьДату(СтрДата)
    
    Возврат СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрДата, "-", ""), " ", ""), ":", "");
    
КонецФункции

Функция ЗагрузитьКотировкиДень(КодИнструмента, НачалоПериода, КонецПериода, СекцияРынка) Экспорт
    
    СтрокаЗапроса = "engines/stock/markets/"+СекцияРынка+"/securities/" + КодИнструмента + "/candles.json" +
    "?from=" + Формат(НачалоПериода, "ДФ=yyyy-MM-dd") +
    "&till=" + Формат(КонецПериода, "ДФ=yyyy-MM-dd") +
    "&interval=24" +
    "&start=";
    
    // получаем данные порциями по 500

    ТекущаяПозиция = 0;
    
    Пока Истина цикл
        
        Данные = ЗапросПолучитьДанные(СтрокаЗапроса + Формат(ТекущаяПозиция, "ЧГ=0"));
        
        Если Данные = Неопределено тогда
            Сообщение = Новый СообщениеПользователю();
            Сообщение.Текст = "Не удалось загрузить данные";
            Сообщение.Сообщить();
            Возврат Ложь;
        КонецЕсли;
        
        Если Данные.candles.data.Количество() = 0 тогда
            Возврат Истина;
        КонецЕсли;
        
        Для каждого Свеча из Данные.candles.data цикл
            
            ЗаписьКотировки = РегистрыСведений.КотировкиДень.СоздатьМенеджерЗаписи();
            ЗаписьКотировки.Период = ОчиститьДату(Свеча[6]);
            ЗаписьКотировки.Тикер = КодИнструмента;
            ЗаписьКотировки.Open = Свеча[0];
            ЗаписьКотировки.Close = Свеча[1];
            ЗаписьКотировки.High = Свеча[2];
            ЗаписьКотировки.Low = Свеча[3];
            ЗаписьКотировки.Value = Свеча[4];
            ЗаписьКотировки.Volume = Свеча[5];
            ЗаписьКотировки.Записать();
            
        КонецЦикла;
        
        ТекущаяПозиция = ТекущаяПозиция + 500;
        
    КонецЦикла;
    
    Возврат Истина;
    
КонецФункции


В твоем случае КодИнструмента = "YNDX", СекцияРынка = "shares"
   VAVANSTR
 
4 - 07.10.21 - 09:35
(3)  Stephen Ordo, всё работает как часы! Спасибо! Вы лучший!!!

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.