1С 8.3 Получение информации о курсе Bitcoin
Данные > Примеры кода 1С > 1С 8.3 HTTP
Перейти в раздел примеры кода 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);
КонецПроцедуры
Функция ИнформацияОБлокеЗагрузки(ХэшБлока) Экспорт
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);
КонецПроцедуры
1
комментарий
Евгений
15 май 2024
Добрый день, как этой обработкой пользоваться?
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник