1С 8.3 Получение информации о курсе Bitcoin - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Получение информации о курсе Bitcoin

Перейти в раздел примеры кода 1С 8.3:
Парсинг blockchain.info (получение данных о Биткоин) в 1С 8.3:
&НаСервере
Функция ИнформацияОБлокеЗагрузки(ХэшБлока) Экспорт

   HTTPConnection = Новый HTTPConnection("blockchain.info",,,,,,Новый OpenSSLSecureConnection());
   HTTPHeader = Новый Map();
   HTTPHeader.Insert("Content-Type", "application/json; charset=utf-8");
   Query = Новый HTTPRequest("/rawblock/"+ ХэшБлока, HTTPHeader);

   Answer = HTTPConnection.Get(Query);
   AnswerAsString = Answer.GetBodyAsString("UTF-8");

   JSONReader_block = Новый JSONReader;
   JSONReader_block.SetString(AnswerAsString);
   json_structure = ReadJSON(JSONReader_block);

   ИнформацияОБлокеЗагрузкиБД(json_structure);

   HTTPConnection = Неопределено;
   HTTPHeader = Неопределено;
   Query = Неопределено;
   Answer = Неопределено;
   AnswerAsString = Неопределено;
   JSONReader_block = Неопределено;
   Prev_block = json_structure.Prev_block;
   json_structure = Неопределено;

   Если Prev_block <> "" Тогда
       ИнформацияОБлокеЗагрузки(Prev_block);
   КонецЕсли;

КонецФункции

&НаСервере
Функция ИнформацияОБлокеЗагрузкиБД(json_structure)

   Found_block = documents.Block.FindByNumber(json_structure.block_index);

   Если Found_block = documents.Block.EmptyRef() Тогда
       New_block = documents.Block.CreateDocument();
       New_block.Number = json_structure.block_index;
       New_block.Date = ОтметкаВремениВДату (json_structure.time);
       FillPropertyValues(New_block,json_structure);
       Для Каждого transaction_row Из json_structure.tx Цикл
           Новый_row = New_block.Transactions.Add();
           Новый_row.Transaction = ПолучитьТранзакцию(transaction_row);
       КонецЦикла;
       New_block.Write();
       Возврат New_block;
   Иначе
       Возврат Found_block;
   КонецЕсли;

КонецФункции

&НаСервере
Функция ПолучитьТранзакцию(transaction_row)

   Found_transaction = Documents.Transaction.FindByNumber(transaction_row.tx_index);

   Если Found_transaction = Documents.Transaction.EmptyRef() Тогда

       New_transaction = documents.Transaction.CreateDocument();
       New_transaction.Number = transaction_row.tx_index;
       New_transaction.Date = ОтметкаВремениВДату (transaction_row.time);
       FillPropertyValues(New_transaction,transaction_row);

       Для Каждого input_row Из transaction_row.Inputs Цикл
           New_input = New_transaction.Inputs.Add();
           FillPropertyValues(New_input,input_row);
           Если input_row.Property("prev_out") Тогда
               Для Каждого elem_struct Из input_row.prev_out Цикл
                   New_input["prev_out_"+elem_struct.Key] = elem_struct.Value;
               КонецЦикла;
               Если input_row.prev_out.Property("addr") Тогда
                   New_input.Wallet = ПолучитьОбъектКошелька(input_row.prev_out.addr);
               КонецЕсли;
           КонецЕсли;
           New_input.Sum = New_input.prev_out_value / 100000000;
       КонецЦикла;

       Для Каждого output_row Из transaction_row.out Цикл
           New_output = New_transaction.Outputs.Add();
           FillPropertyValues(New_output,output_row);
           Если output_row.Property("addr") Тогда
               New_output.Wallet = ПолучитьОбъектКошелька(output_row.addr)
           КонецЕсли;
           New_output.sum = New_output.value / 100000000;
       КонецЦикла;

       New_transaction.Write();
       Возврат New_transaction.Ref;
   Иначе
       Возврат Found_transaction;
   КонецЕсли;

КонецФункции

&НаСервере
Функция ПолучитьОбъектКошелька(wallet_string)

   Found_wallet = catalogs.Wallets.FindByCode(wallet_string);

   Если Found_wallet = catalogs.Wallets.EmptyRef() Тогда
       New_wallet = catalogs.Wallets.CreateItem();
       New_wallet.Code =  wallet_string;
       New_wallet.Write();
       Возврат New_wallet.Ref;
   Иначе
       Возврат Found_wallet;
   КонецЕсли;

КонецФункции

&НаСервере
Функция ОтметкаВремениВДату(TimeStamp)

   Попытка
       Возврат Дата("19700101")+?(ТипЗнч(TimeStamp) = Тип("Строка"), Число(TimeStamp), TimeStamp);
   Исключение
       Возврат Неопределено;
   КонецПопытки;

КонецФункции

&НаСервере
Процедура ЗагрузитьИнформациюОБлоке() Экспорт

   Blocks_selection = documents.Block.Select();
   Пока Blocks_selection.Next() Цикл
       Prev_block = Blocks_selection.Prev_block;
       Прервать;
   КонецЦикла;

   ИнформацияОБлокеЗагрузки(Prev_block);

КонецПроцедуры
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 16.04.2022
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому