Для того, чтобы разобраться в каком-то механизме, нужно набить руку. API не является исключением. Как по мне, идеальным решением являются маленькие сайты со своей простой документацией. Но где же взять такие сайты? Самое первое, что приходит на ум, набрать в поисковике гугл "интересные и забавные идеи api". Гугл выдает множество запросов со списками таких сайтов. Собственно идея была взята на вооружение после прочтения вот этой статьи 17 интересных (и забавных) API для вашего проекта. Из нее я взял только те сайты, что работают, у которых не слишком громоздкая документация и небольшой httpответ. Итак, поехали:
1. Fasttranslator это первое, что нам потребуется. Ведь сайты, описанные в статье на английском языке, ответы так же будут приходить на английском, а ведь не каждый из нас его знает. Тут нам на помощь приходят различные переводчики со своей документацией, такие как яндекс и т.д. Почитав немного про яндекс, становится понятно, что данный переводчик когда-то был бесплатным, теперь он платный. На просторах сети есть и другие переводчики, однако выбор почему-то пал на этот. Он, конечно же, имеет свои ограничения и при переводе больших объемов текста (больше 1000 символов) выдает 400 ошибку, но для наших учебных целей подойдет. Также вот тут представлена полная документация по данному переводчику.
1С:
#Область Fasttranslator
&НаСервере
Функция ПолучитьПереведенныйТекст(ТекстДляПеревода)
СтрокаПодключенияКFasttranslator = "fasttranslator.herokuapp.com";
СтрокаПодключения = "/api/v1/text/to/text";
СтрокаПодключения = СтрокаПодключения + "?source=" + СокрЛП(ТекстДляПеревода) + "&lang=" + "en-ru";
СоединениеHTTP = ПолучитьСоединениеHTTPFasttranslator(СтрокаПодключенияКFasttranslator);
HTTPЗапрос = Новый HTTPЗапрос(СтрокаПодключения);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
СтрокаJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
СоответствиеИзJSON = ПреобразоватьJSONВСоответствиеFasttranslator(СтрокаJSON);
Возврат СоответствиеИзJSON["data"];
Исключение
Возврат ОписаниеОшибки();
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Возврат "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Возврат "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Возврат "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Иначе
Возврат "Неизвестная ошибка.";
КонецЕсли;
Исключение
Возврат ОписаниеОшибки();
КонецПопытки;
КонецФункции // ()
&НаСервере
Функция ПолучитьСоединениеHTTPFasttranslator(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСоответствиеFasttranslator(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
#КонецОбласти
2. Numbers. Сервис, где при указании числа, месяца/дня или года можно получить случайное описание.
Собственно, как это сделано в 1С:
#Область Numbers
&НаСервере
Процедура ПриСозданииНаСервереNumbers()
Элементы.ВтороеЧислоДатыФакта.Видимость = Ложь;
Объект.Факт = "Факт из жизни";
КонецПроцедуры
&НаСервере
Процедура ПолучитьФактНаСервере()
СтрокаПодключенияКСайтуNumbers = "numbersapi.com";
СлучайноеЧисло = "random/";
Если Объект.Факт = "Факт из жизни" Тогда
ОтправляемоеЧисло = "/" + ?(Строка(Объект.СлучайныйФакт), СлучайноеЧисло, Строка(Формат(Объект.ЧислоФакта, "ЧГ=")) + "/");
ТипФакта = "trivia";
ИначеЕсли Объект.Факт = "Математический факт" Тогда
ОтправляемоеЧисло = "/" + ?(Строка(Объект.СлучайныйФакт), СлучайноеЧисло, Строка(Формат(Объект.ЧислоФакта, "ЧГ=")) + "/");
ТипФакта = "math";
ИначеЕсли Объект.Факт = "Историческая дата" Тогда
ОтправляемоеЧисло = "/" + ?(Строка(Объект.СлучайныйФакт), СлучайноеЧисло, Строка(Формат(Объект.ЧислоФакта, "ЧГ=")) + "/" +
Строка(Формат(Объект.ВтороеЧислоДатыФакта, "ЧГ=")) + "/");
ТипФакта = "date";
ИначеЕсли Объект.Факт = "Исторический год" Тогда
ОтправляемоеЧисло = "/" + ?(Строка(Объект.СлучайныйФакт), СлучайноеЧисло, Строка(Формат(Объект.ЧислоФакта, "ЧГ=")) + "/");
ТипФакта = "year";
КонецЕсли;
СтрокаПодключения = ОтправляемоеЧисло + ТипФакта;
СоединениеHTTP = ПолучитьСоединениеHTTPNumbers(СтрокаПодключенияКСайтуNumbers);
HTTPЗапрос = Новый HTTPЗапрос(СтрокаПодключения);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
Объект.ОписаниеФакта = HTTPОтвет.ПолучитьТелоКакСтроку();
Объект.ОписаниеФактаПереведено = ПолучитьПереведенныйТекст(Объект.ОписаниеФакта);
Исключение
Объект.ОписаниеФакта = ОписаниеОшибки();
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Объект.ОписаниеФакта = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Объект.ОписаниеФакта = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Объект.ОписаниеФакта = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Иначе
Объект.ОписаниеФакта = "Неизвестная ошибка.";
КонецЕсли;
Исключение
Объект.ОписаниеФакта = ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьФакт(Команда)
ПолучитьФактНаСервере();
КонецПроцедуры
&НаСервере
Процедура ФактПриИзмененииНаСервере()
Если Объект.Факт = "Историческая дата" Тогда
Элементы.ВтороеЧислоДатыФакта.Видимость = Истина;
Иначе
Элементы.ВтороеЧислоДатыФакта.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФактПриИзменении(Элемент)
ФактПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура СлучайныйФактПриИзмененииНаСервере()
Если Объект.СлучайныйФакт Тогда
Элементы.ЧислоФакта.Видимость = Ложь;
Элементы.ВтороеЧислоДатыФакта.Видимость = Ложь;
Иначе
Если Объект.Факт = "Историческая дата" Тогда
Элементы.ВтороеЧислоДатыФакта.Видимость = Истина;
Иначе
Элементы.ВтороеЧислоДатыФакта.Видимость = Ложь;
КонецЕсли;
Элементы.ЧислоФакта.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СлучайныйФактПриИзменении(Элемент)
СлучайныйФактПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Функция ПолучитьСоединениеHTTPNumbers(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаКлиенте
Процедура Декорация1Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("http://numbersapi.com/");
КонецПроцедуры
#КонецОбласти
3. База вопросов для викторин. Достаточно странный сервис, для получения случайных вопросов и ответов на них. Как он работает, я и сам не до конца разобрался, однако какие-то вопросы через него удается получить.
1C:
#Область Викторины
&НаСервере
Процедура ПриСозданииНаСервереВикторины()
СтоимостьВДолларах = 100;
НомерКатегории = 1;
КодСлучайногоВопроса = 1;
КодКатегорий = 1;
КодКатегории = 1;
КонецПроцедуры
&НаКлиенте
Процедура Викторина(Команда)
ИмяКоманды = Команда.Имя;
ПолучитьСлучайныйВопросНаСервере(ИмяКоманды);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСлучайныйВопросНаСервере(ИмяКоманды)
Если ИмяКоманды = "ПодсказкиВикторины" Тогда
СтрокаПодключения = "/api/clues?value=" + СтоимостьВДолларах + "&category=" + НомерКатегории;
ИначеЕсли ИмяКоманды = "СлучайноеЗначениеВикторины" Тогда
СтрокаПодключения = "/api/random?count=" + КодСлучайногоВопроса;
ИначеЕсли ИмяКоманды = "КатегорииВикторины" Тогда
СтрокаПодключения = "/api/categories?count=" + КодКатегорий;
ИначеЕсли ИмяКоманды = "КатегорияВикторины" Тогда
СтрокаПодключения = "/api/category?id=" + КодКатегории;
КонецЕсли;
СоединениеHTTP = ПолучитьСоединениеHTTPВикторина("jservice.io");
HTTPЗапрос = Новый HTTPЗапрос(СтрокаПодключения);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
Пакет = HTTPОтвет.ПолучитьТелоКакСтроку();
СписокИзПакета = ПреобразоватьJSONВСписокВикторины(Пакет);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Объект.ОписаниеВикторины = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Возврат;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Объект.ОписаниеВикторины = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
Возврат;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Объект.ОписаниеВикторины = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Возврат;
Иначе
Объект.ОписаниеВикторины = "Неизвестная ошибка.";
Возврат;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
ОбработатьОтветВикторины(СписокИзПакета, ИмяКоманды);
КонецПроцедуры
&НаСервере
Процедура ОбработатьОтветВикторины(СписокИзПакета, ИмяКоманды)
СтрокаНаВывод = "";
Для каждого Стр Из СписокИзПакета Цикл
Если ИмяКоманды = "ПодсказкиВикторины" ИЛИ ИмяКоманды = "СлучайноеЗначениеВикторины" Тогда
СоответствиеКатегория = Стр["category"];
ОписаниеКатегории = СоответствиеКатегория["title"];
СтрокаНаВывод = СтрокаНаВывод + "id" + ": " + Строка(Стр["id"]) + "," + Символы.ПС +
"question" + ": " + Строка(Стр["question"]) + "," + Символы.ПС +
"answer" + ": " + Строка(Стр["answer"]) + "," + Символы.ПС +
"category" + ": " + ОписаниеКатегории + "." + Символы.ПС + Символы.ПС;
ИначеЕсли ИмяКоманды = "КатегорииВикторины" Тогда
СтрокаНаВывод = СтрокаНаВывод + "id" + ": " + Строка(Стр["id"]) + "," + Символы.ПС +
"title" + ": " + Строка(Стр["title"]) + "," + Символы.ПС +
"clues_count" + ": " + Строка(Стр["clues_count"]) + "." + Символы.ПС + Символы.ПС;
ИначеЕсли ИмяКоманды = "КатегорияВикторины" И ТипЗнч(СписокИзПакета) = Тип("Соответствие") Тогда
СтрокаНаВывод = СтрокаНаВывод + "id" + ": " + Строка(СписокИзПакета["id"]) + "," + Символы.ПС +
"category" + ": " + Строка(СписокИзПакета["title"]) + "," + Символы.ПС +
"clues_count" + ": " + Строка(СписокИзПакета["clues_count"]) + "." + Символы.ПС + Символы.ПС;
МассивПодсказок = СписокИзПакета["clues"];
Для каждого Подсказка Из МассивПодсказок Цикл
СтрокаНаВывод = СтрокаНаВывод + "id" + ": " + Строка(Подсказка["id"]) + "," + Символы.ПС +
"question" + ": " + Строка(Подсказка["question"]) + "," + Символы.ПС +
"answer" + ": " + Строка(Подсказка["answer"]) + "," + Символы.ПС +
"category_id" + ": " + Строка(Подсказка["category_id"]) + "." + Символы.ПС + Символы.ПС;
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;
Объект.ОписаниеВикторины = СтрокаНаВывод;
Объект.ОписаниеВикториныПереведено = ПолучитьПереведенныйТекст(Объект.ОписаниеВикторины);
КонецПроцедуры
&НаСервере
Функция ПолучитьСоединениеHTTPВикторина(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСписокВикторины(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
&НаКлиенте
Процедура Декорация2Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("http://jservice.io/");
КонецПроцедуры
#КонецОбласти
4. Чем заняться. Предлагает занятия на любой вкус. Жалко, что гиперссылки не всегда выдает, а только описание.
1C:
#Область ЧемЗаняться
&НаСервере
Процедура ПриСозданииНаСервереЧемЗаняться()
Объект.ТипыСобытийBoreapi = "Образование";
КоличествоЛюдейBoreapi = 1;
МинимальнаяЦенаBoreapi = 0;
МаксимальнаяЦенаBoreapi = 1;
МинимальнаяДоступностьBoreapi = 0;
МаксимальнаяДоступностьBoreapi = 1;
КонецПроцедуры
&НаКлиенте
Процедура Декорация3Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("http://www.boredapi.com/documentation");
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСлучайноеСобытиеBored(Команда)
СлучайноеСобытиеBored = "/api/activity";
ОбработатьBoredНаСервере(СлучайноеСобытиеBored);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСобытиеПоКлючуНаСервере()
СлучайноеСобытиеBored = "/api/activity/?key=" + Строка(Формат(КлючСобытияboredapi, "ЧГ="));
ОбработатьBoredНаСервере(СлучайноеСобытиеBored);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСобытиеПоКлючу(Команда)
ПолучитьСобытиеПоКлючуНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьСобытиеПоТипуНаСервере()
СобытиеПоТипу = "/api/activity?type=";
Если Объект.ТипыСобытийBoreapi = "Образование" Тогда
СобытиеПоТипу = СобытиеПоТипу + "education";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Развлекательный" Тогда
СобытиеПоТипу = СобытиеПоТипу + "recreational";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Социальный" Тогда
СобытиеПоТипу = СобытиеПоТипу + "social";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Сделай сам" Тогда
СобытиеПоТипу = СобытиеПоТипу + "diy";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Благотворительность" Тогда
СобытиеПоТипу = СобытиеПоТипу + "charity";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Кулинария" Тогда
СобытиеПоТипу = СобытиеПоТипу + "cooking";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Отдых" Тогда
СобытиеПоТипу = СобытиеПоТипу + "relaxation";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Музыка" Тогда
СобытиеПоТипу = СобытиеПоТипу + "music";
ИначеЕсли Объект.ТипыСобытийBoreapi = "Работа" Тогда
СобытиеПоТипу = СобытиеПоТипу + "busywork";
КонецЕсли;
ОбработатьBoredНаСервере(СобытиеПоТипу);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСобытиеПоТипу(Команда)
ПолучитьСобытиеПоТипуНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьСобытиеПоУчастникуНаСервере()
СобытиеПоЧислуУчастников = "/api/activity?participants=" + Строка(Формат(КоличествоЛюдейBoreapi, "ЧГ="));
ОбработатьBoredНаСервере(СобытиеПоЧислуУчастников);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСобытиеПоУчастнику(Команда)
ПолучитьСобытиеПоУчастникуНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьСобытиеПоЦенеBoreapiНаСервере()
СобытиеПоЦене = "/api/activity?price=" + Строка(Формат(?(ЦенаBoreapi = Истина,1,0), "ЧГ="));
ОбработатьBoredНаСервере(СобытиеПоЦене);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСобытиеПоЦенеBoreapi(Команда)
ПолучитьСобытиеПоЦенеBoreapiНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьМинМаксЦенуBoreapiНаСервере()
СобытиеПоЦенеМинМакс = "/api/activity?minprice=" + Строка(Формат(МинимальнаяЦенаBoreapi, "ЧГ=")) +
"&maxprice=" + Строка(Формат(МаксимальнаяЦенаBoreapi, "ЧГ="));
ОбработатьBoredНаСервере(СобытиеПоЦенеМинМакс);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьМинМаксЦенуBoreapi(Команда)
ПолучитьМинМаксЦенуBoreapiНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьСобытиеПоДоступностиНаСервере()
СобытиеПоЦене = "/api/activity?accessibility=" + Строка(Формат(?(ДоступностьBoreapi = Истина,1,0), "ЧГ="));
ОбработатьBoredНаСервере(СобытиеПоЦене);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСобытиеПоДоступности(Команда)
ПолучитьСобытиеПоДоступностиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьСобытиеПоДиапазонуДоступностиНаСервере()
СобытиеПоЦенеМинМакс = "/api/activity?minaccessibility=" + Строка(Формат(МинимальнаяДоступностьBoreapi, "ЧГ=")) +
"&maxaccessibility=" + Строка(Формат(МаксимальнаяДоступностьBoreapi, "ЧГ="));
ОбработатьBoredНаСервере(СобытиеПоЦенеМинМакс);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСобытиеПоДиапазонуДоступности(Команда)
ПолучитьСобытиеПоДиапазонуДоступностиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОбработатьBoredНаСервере(СтрокаПодключения)
СоединениеHTTP = ПолучитьСоединениеHTTPЧемЗаняться("www.boredapi.com");
HTTPЗапрос = Новый HTTPЗапрос(СтрокаПодключения);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
Пакет = HTTPОтвет.ПолучитьТелоКакСтроку();
ДанныеИзПакета = ПреобразоватьJSONВСоответствиеЧемЗаняться(Пакет);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Объект.ОписаниеЧемЗаняться = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Возврат;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Объект.ОписаниеЧемЗаняться = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
Возврат;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Объект.ОписаниеЧемЗаняться = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Возврат;
Иначе
Объект.ОписаниеЧемЗаняться = "Неизвестная ошибка.";
Возврат;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
ОбработатьОтветЧемЗаняться(ДанныеИзПакета);
КонецПроцедуры
&НаСервере
Процедура ОбработатьОтветЧемЗаняться(ДанныеИзПакета)
СтрокаНаВывод = "";
Для каждого Стр Из ДанныеИзПакета Цикл
СтрокаНаВывод = СтрокаНаВывод + Стр.Ключ + ": " + Стр.Значение + ";" + Символы.ПС;
КонецЦикла;
Объект.ОписаниеЧемЗаняться = СтрокаНаВывод;
Объект.ОписаниеЧемЗанятьсяПереведено = ПолучитьПереведенныйТекст(Объект.ОписаниеЧемЗаняться);
КонецПроцедуры
&НаСервере
Функция ПолучитьСоединениеHTTPЧемЗаняться(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСоответствиеЧемЗаняться(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
#КонецОбласти
5. Карты. Можно получать картинки игральных карт, создавать колоды карт, извлекать из колоды карты.
1C:
#Область КолодаКарт
&НаСервере
Процедура ПриСозданииНаСервереКолодаКарт()
Объект.КоличествоКолодКарт = 1;
КоличествоКартинокДляКолодыКарт = 1;
КонецПроцедуры
&НаСервере
Процедура ОбработатьКомандыКолодыКарт(СтрокаДляОбработки)
Соединение = ПолучитьСоединениеHTTPКолодаКарт("www.deckofcardsapi.com");
HTTPЗапрос = Новый HTTPЗапрос(СтрокаДляОбработки);
Попытка
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
Пакет = HTTPОтвет.ПолучитьТелоКакСтроку();
ДанныеИзПакета = ПреобразоватьJSONВСоответствиеКолодаКарт(Пакет);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Возврат;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Возврат;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда;
Возврат;
Иначе
Объект.ОписаниеЧемЗаняться = "Неизвестная ошибка.";
Возврат;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
ОбработатьОтветКолодыКарт(ДанныеИзПакета);
КонецПроцедуры
&НаСервере
Функция ПолучитьСоединениеHTTPКолодаКарт(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Процедура ОбработатьОтветКолодыКарт(ДанныеИзПакета)
СтрокаНаВывод = "";
Для каждого Стр Из ДанныеИзПакета Цикл
СтрокаНаВывод = СтрокаНаВывод + Стр.Ключ + ": " + Стр.Значение + ";" + Символы.ПС;
Если Стр.Ключ = "deck_id" Тогда
Объект.ИдентификаторКолод = СокрЛП(Стр.Значение);
ИначеЕсли Стр.Ключ = "cards" Тогда
МассивКарты = Стр.Значение;
ПолучитьИДобавитьКартинки(МассивКарты);
КонецЕсли;
КонецЦикла;
Объект.ОписаниеКолодыКарт = СтрокаНаВывод;
Объект.ОписаниеКолодыКартПереведено = ПолучитьПереведенныйТекст(Объект.ОписаниеКолодыКарт);
КонецПроцедуры
&НаСервере
Процедура ПолучитьИДобавитьКартинки(МассивКарт)
УдалитьРеквизитыКартинокСФормы(3);
ДобавитьРеквизитыКартинокНаФорму(МассивКарт);
Счетчик = 1;
Для каждого СтрКарта Из МассивКарт Цикл
АдресКартинкиКарты = СтрКарта["image"];
СтрокаДляОбработки = СтрЗаменить(АдресКартинкиКарты, "https://deckofcardsapi.com", "");
КартинкаНаСервере = ПолучитьКартинкуКартыССайта(СтрокаДляОбработки);
Если КартинкаНаСервере = Неопределено Тогда
Возврат;
КонецЕсли;
ЭтотОбъект["КартинкаКарты" + Счетчик] = ПоместитьВоВременноеХранилище(КартинкаНаСервере, УникальныйИдентификатор);
Элементы["КартинкаКарты" + Счетчик].РазмерКартинки = РазмерКартинки.Пропорционально;
Счетчик = Счетчик + 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УдалитьРеквизитыКартинокСФормы(КоличествоУдалений)
МассивРеквизитов = Новый Массив;
Для каждого Элемент Из Элементы Цикл
ИмяЭлемента = Элемент.Имя;
Если СтрНайти(ИмяЭлемента,"КартинкаКарты") Тогда
Если ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
ИмяРеквизита = Элемент.ПутьКДанным;
МассивРеквизитов.Добавить(ИмяРеквизита);
КонецЕсли;
Элементы.Удалить(Элемент);
КонецЕсли;
КонецЦикла;
ИзменитьРеквизиты(,МассивРеквизитов);
КоличествоУдалений = КоличествоУдалений - 1;
Если КоличествоУдалений = 0 Тогда
Возврат;
КонецЕсли;
УдалитьРеквизитыКартинокСФормы(КоличествоУдалений)
КонецПроцедуры
&НаСервере
Процедура ДобавитьРеквизитыКартинокНаФорму(МассивКарт)
ГруппаКартинок = Элементы.ГруппаКартинок;
ДобавляемыеРеквизиты = Новый Массив;
КоличествоКартВМассиве = МассивКарт.Количество();
Для Счетчик = 1 По КоличествоКартВМассиве Цикл
ИмяРеквизита = "КартинкаКарты" + Счетчик;
ИмяЗаголовка = "Картинка карты" + Счетчик;
ТипРеквизита = Новый ОписаниеТипов("Строка");
ДобавляемыРеквизит = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита, "", ИмяЗаголовка);
ДобавляемыеРеквизиты.Добавить(ДобавляемыРеквизит);
КонецЦикла;
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
Для каждого Реквизит Из ДобавляемыеРеквизиты Цикл
ЭлементФормы = Элементы.Добавить(Реквизит.Имя, Тип("ПолеФормы"), ГруппаКартинок);
ЭлементФормы.Вид = ВидПоляФормы.ПолеКартинки;
ЭлементФормы.ПутьКДанным = Реквизит.Имя;
ЭлементФормы.РастягиватьПоВертикали = Ложь;
ЭлементФормы.РастягиватьПоГоризонтали = Ложь;
ЭлементФормы.Ширина = 15;
ЭлементФормы.Высота = 7;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьКартинкуКартыССайта(СтрокаПодключения)
СоединениеHTTP = ПолучитьСоединениеHTTPКолодаКарт("www.deckofcardsapi.com");
HTTPЗапрос = Новый HTTPЗапрос(СтрокаПодключения);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
ДвоичныеДанныеКартинки = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();
Возврат ДвоичныеДанныеКартинки;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Возврат Неопределено;
Иначе
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
КонецФункции // ()
&НаСервере
Процедура СоздатьКолодыКартНаСервере()
СтрокаДляОбработки = "/api/deck/new/shuffle/?deck_count=" + Строка(Формат(Объект.КоличествоКолодКарт,"ЧГ="));
ОбработатьКомандыКолодыКарт(СтрокаДляОбработки);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьКолодыКарт(Команда)
СоздатьКолодыКартНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьКартинкуКартыНаСервере()
Если НЕ ЗначениеЗаполнено(Объект.ИдентификаторКолод) Тогда
Сообщить("Не создана колода.");
Возврат;
КонецЕсли;
СтрокаДляОбработки = "/api/deck/" + Объект.ИдентификаторКолод + "/draw/?count=" + КоличествоКартинокДляКолодыКарт;
ОбработатьКомандыКолодыКарт(СтрокаДляОбработки);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьКартинкуКарты(Команда)
ПолучитьКартинкуКартыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Декорация4Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://deckofcardsapi.com");
КонецПроцедуры
&НаСервере
Функция ПреобразоватьJSONВСоответствиеКолодаКарт(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
#КонецОбласти
6. Ошибки с котиками. Вводим код ошибки, получаем картинку с котиком.
1C:
#Область Cat
&НаСервере
Процедура ПриСозданииНаСервереCat()
КодОшибкиCat = 101;
КонецПроцедуры
&НаСервере
Процедура ПолучитьКодОшибкиCatНаСервере()
СтрокаДляПередачи = "/" + Строка(Формат(КодОшибкиCat, "ЧГ="));
ДвоичныеДанныеКартинки = ПередатьКодОшибкиCat(СтрокаДляПередачи);
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
КартинкаСКотиком = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор);
Элементы.КартинкаСКотиком.РазмерКартинки = РазмерКартинки.Пропорционально;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьКодОшибкиCat(Команда)
ПолучитьКодОшибкиCatНаСервере();
КонецПроцедуры
&НаСервере
Функция ПередатьКодОшибкиCat(СтрокаДляОбработки)
Соединение = ПолучитьСоединениеHTTPCat("http.cat");
HTTPЗапрос = Новый HTTPЗапрос(СтрокаДляОбработки);
Попытка
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
ДвоичныеДанныеКартинки = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();
Возврат ДвоичныеДанныеКартинки;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Возврат Неопределено;
Иначе
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаСервере
Функция ПолучитьСоединениеHTTPCat(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаКлиенте
Процедура Декорация5Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://http.cat");
КонецПроцедуры
7. Картинка случайного котика.
#Область RandomCat
&НаСервере
Процедура ПриСозданииНаСервереRandomCat()
Элементы.ОшибкаПриПолученииКотика.Видимость = Ложь;
КонецПроцедуры
&НаСервере
Процедура ПолучитьRandomCatНаСервере()
ДанныеRandomCat = ЗагрузитьRandomCat();
Если ДанныеRandomCat = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаДляОбработки = ДанныеRandomCat["file"];
СтрокаБезHTTPS = СтрЗаменить(СтрокаДляОбработки, "https://", "");
ПозицияКоманды = СтрНайти(СтрокаБезHTTPS, "/");
КоличествоОтбираемыхСимволов = ПозицияКоманды - 1;
СтрокаАдреса = Лев(СтрокаБезHTTPS, КоличествоОтбираемыхСимволов);
СтрокаКоманды = СтрЗаменить(СтрокаБезHTTPS, СтрокаАдреса, "");
ПолученаяКартинка = ПолучитьКартинкуRandomCatsССайта(СтрокаАдреса, СтрокаКоманды);
Если ПолученаяКартинка = Неопределено Тогда
Возврат;
КонецЕсли;
КартинкаСКотиком2 = ПоместитьВоВременноеХранилище(ПолученаяКартинка, УникальныйИдентификатор);
Элементы.КартинкаСКотиком2.РазмерКартинки = РазмерКартинки.Пропорционально;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьRandomCat(Команда)
ПолучитьRandomCatНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Декорация6Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://aws.random.cat");
КонецПроцедуры
&НаСервере
Функция ЗагрузитьRandomCat()
Соединение = ПолучитьСоединениеHTTPRandomCat("aws.random.cat");
HTTPЗапрос = Новый HTTPЗапрос("/meow");
Попытка
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
СсылкаНаКартинкуJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
СписокИзПакета = ПреобразоватьJSONВСписокRandomCat(СсылкаНаКартинкуJSON);
Элементы.ОшибкаПриПолученииКотика.Видимость = Ложь;
Возврат СписокИзПакета;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
ОшибкаПриПолученииКотика = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Элементы.ОшибкаПриПолученииКотика.Видимость = Истина;
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
ОшибкаПриПолученииКотика = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
Элементы.ОшибкаПриПолученииКотика.Видимость = Истина;
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
ОшибкаПриПолученииКотика = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Элементы.ОшибкаПриПолученииКотика.Видимость = Истина;
Возврат Неопределено;
Иначе
ОшибкаПриПолученииКотика = "Неизвестная ошибка.";
Элементы.ОшибкаПриПолученииКотика.Видимость = Истина;
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаСервере
Функция ПолучитьКартинкуRandomCatsССайта(СтрокаАдреса, СтрокаКоманды)
СоединениеHTTP = ПолучитьСоединениеHTTPКолодаКарт(СтрокаАдреса);
HTTPЗапрос = Новый HTTPЗапрос(СтрокаКоманды);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
ДвоичныеДанныеКартинки = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();
Возврат ДвоичныеДанныеКартинки;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Возврат Неопределено;
Иначе
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
КонецФункции // ()
&НаСервере
Функция ПолучитьСоединениеHTTPRandomCat(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСписокRandomCat(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
#КонецОбласти
#Область Dogs
&НаСервере
Процедура ПриСозданииНаСервереDogs()
СписокКартинокDogs.Очистить();
КонецПроцедуры
&НаСервере
Процедура ПолучитьСписокКартинокDogsНаСервере()
СписокКартинокDogs.Очистить();
КомандаНаПолучениеВсехКартинок = "/doggos";
СписокКартинок = ОбработатьКартинкиDogs(КомандаНаПолучениеВсехКартинок);
Если ТипЗнч(СписокКартинок) = Тип("Массив") Тогда
Для каждого Стр Из СписокКартинок Цикл
СписокКартинокDogs.Добавить(Стр);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОбработатьКартинкиDogs(СтрокаДляОбработки)
Соединение = ПолучитьСоединениеHTTPDogs("random.dog");
HTTPЗапрос = Новый HTTPЗапрос(СтрокаДляОбработки);
Попытка
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
Если СтрокаДляОбработки = "/doggos" Тогда
ДанныеJSONВсехКартинок = HTTPОтвет.ПолучитьТелоКакСтроку();
МассивКартинок = ПреобразоватьJSONВСписокDogs(ДанныеJSONВсехКартинок);
Элементы.ДекорацияОшибкаDogs.Заголовок = "";
Возврат МассивКартинок;
Иначе
ДанныеКартинки = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();
Элементы.ДекорацияОшибкаDogs.Заголовок = "";
Возврат ДанныеКартинки;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Элементы.ДекорацияОшибкаDogs.Заголовок = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Элементы.ДекорацияОшибкаDogs.Заголовок = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";;
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Элементы.ДекорацияОшибкаDogs.Заголовок = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Возврат Неопределено;
Иначе
Элементы.ДекорацияОшибкаDogs.Заголовок = "Неизвестная ошибка";
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаКлиенте
Процедура ПолучитьСписокКартинокDogs(Команда)
ПолучитьСписокКартинокDogsНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Декорация7Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://random.dog/");
КонецПроцедуры
&НаСервере
Функция ПолучитьСоединениеHTTPDogs(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСписокDogs(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
&НаСервере
Процедура СписокКартинокDogsВыборНаСервере(СтрокаКартинки)
Если СписокКартинокDogs.Количество() > 0 И СтрокаКартинки <> "" Тогда
СтрокаДляОбработки = "/" + СтрокаКартинки;
ДвоичныеДанныеКартинки = ОбработатьКартинкиDogs(СтрокаДляОбработки);
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
КартинкаDogs = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокКартинокDogsВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтрокаКартинки = Элемент.ТекущиеДанные.Значение;
СписокКартинокDogsВыборНаСервере(СтрокаКартинки);
КонецПроцедуры
#КонецОбласти
#Область Fox
&НаСервере
Процедура ПриСозданииНаСервереFox()
ДанныеHTMLКартинки = КартинкаFoxПолучитьКартинку();
Если ДанныеHTMLКартинки <> Неопределено Тогда
КартинкаFox = ДанныеHTMLКартинки;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция КартинкаFoxПолучитьКартинку()
ДанныеHTMLКартинки = ОбработатьКартинкуFox();
Возврат ДанныеHTMLКартинки;
КонецФункции
&НаСервере
Функция ОбработатьКартинкуFox()
Соединение = ПолучитьСоединениеHTTPDogs("randomfox.ca");
HTTPЗапрос = Новый HTTPЗапрос();
Попытка
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
ДанныеКартинки = HTTPОтвет.ПолучитьТелоКакСтроку();
Элементы.ДекорацияОшибкаFox.Заголовок = "";
Возврат ДанныеКартинки;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Элементы.ДекорацияОшибкаFox.Заголовок = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Элементы.ДекорацияОшибкаFox.Заголовок = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";;
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Элементы.ДекорацияОшибкаFox.Заголовок = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Возврат Неопределено;
Иначе
Элементы.ДекорацияОшибкаFox.Заголовок = "Неизвестная ошибка";
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаКлиенте
Процедура Декорация8Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://randomfox.ca/");
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьКартинкуFox(Команда)
ДанныеHTMLКартинки = КартинкаFoxПолучитьКартинку();
Если ДанныеHTMLКартинки <> Неопределено Тогда
КартинкаFox = ДанныеHTMLКартинки;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
10. Генератор случайного текста. Вводим количество предложений или абзацев и получаем текст.
1С:
Правда, тут одно но, про которое я говорил выше. Переводчик не осиливает слишком большой текст.
#Область Bakon
&НаСервере
Процедура ПриСозданииНаСервереBakon()
КоличествоАбзацевBakon = 1;
КоличествоПредложенийBakon = 1;
КонецПроцедуры
&НаКлиенте
Процедура Декорация9Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://baconipsum.com/");
КонецПроцедуры
&НаСервере
Процедура ПолучитьКоличествоСтрокBakonНаСервере()
СтрокаДляОбработки = "/api/?type=all-meat&sentences=" + Строка(Формат(КоличествоПредложенийBakon, "ЧГ="));
МассивСтрок = ПолучитьBakonНаСервере(СтрокаДляОбработки);
Если МассивСтрок <> Неопределено И МассивСтрок.Количество() > 0 Тогда
Объект.ОписаниеBakon = МассивСтрок[0];
Объект.ОписаниеBakonПереведено = ПолучитьПереведенныйТекст(Объект.ОписаниеBakon);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьКоличествоСтрокBakon(Команда)
ПолучитьКоличествоСтрокBakonНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПолучитьАбзацыBakonНаСервере()
СтрокаДляОбработки = "/api/?type=all-meat¶s=" + Строка(Формат(КоличествоАбзацевBakon, "ЧГ=") + "&start-with-lorem=1");
МассивСтрок = ПолучитьBakonНаСервере(СтрокаДляОбработки);
СтрокаBakon = "";
Если МассивСтрок <> Неопределено Тогда
Для каждого Стр Из МассивСтрок Цикл
СтрокаBakon = СтрокаBakon + Стр + Символы.ПС + Символы.ПС;
КонецЦикла;
Объект.ОписаниеBakon = СтрокаBakon;
Объект.ОписаниеBakonПереведено = ПолучитьПереведенныйТекст(Объект.ОписаниеBakon);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьАбзацыBakon(Команда)
ПолучитьАбзацыBakonНаСервере();
КонецПроцедуры
&НаСервере
Функция ПолучитьBakonНаСервере(СтрокаДляОбработки)
СтрокаПодключенияКСайтуBakon = "baconipsum.com";
СоединениеHTTP = ПолучитьСоединениеHTTPBakon(СтрокаПодключенияКСайтуBakon);
HTTPЗапрос = Новый HTTPЗапрос(СтрокаДляОбработки);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
СтрокаJSONBakon = HTTPОтвет.ПолучитьТелоКакСтроку();
МассивBakon = ПреобразоватьJSONВСписокBakon(СтрокаJSONBakon);
Возврат МассивBakon;
Исключение
Объект.ОписаниеBakon = ОписаниеОшибки();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Объект.ОписаниеBakon = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Объект.ОписаниеBakon = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Объект.ОписаниеBakon = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Возврат Неопределено;
Иначе
Возврат Неопределено;
Объект.ОписаниеBakon = "Неизвестная ошибка.";
КонецЕсли;
Исключение
Возврат Неопределено;
Объект.ОписаниеBakon = ОписаниеОшибки();
КонецПопытки;
КонецФункции
&НаСервере
Функция ПолучитьСоединениеHTTPBakon(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения,,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСписокBakon(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
#КонецОбласти
11. Шутки про Чак Нориса. Куда же без них.
#Область Шутки
&НаСервере
Процедура ШуткаПроЧакаНорисаНаСервере()
СтрокаДляОбработки = "/api?format=json";
СтрокаШутки = ОбработатьШуткуПроЧака(СтрокаДляОбработки);
Если СтрокаШутки <> Неопределено Тогда
Объект.ОписаниеШутки = СтрокаШутки;
Объект.ОписаниеШуткиПереведено = ПолучитьПереведенныйТекст(Объект.ОписаниеШутки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ШуткаПроЧакаНориса(Команда)
ШуткаПроЧакаНорисаНаСервере();
КонецПроцедуры
&НаСервере
Функция ОбработатьШуткуПроЧака(СтрокаДляОбработки)
СтрокаПодключенияКСайтуGeek = "geek-jokes.sameerkumar.website";
СоединениеHTTP = ПолучитьСоединениеHTTPGeekJokes(СтрокаПодключенияКСайтуGeek);
HTTPЗапрос = Новый HTTPЗапрос(СтрокаДляОбработки);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
СтрокаJSONGeek = HTTPОтвет.ПолучитьТелоКакСтроку();
СоответствиеJoke = ПреобразоватьJSONВСписокGeekJokes(СтрокаJSONGeek);
Возврат СоответствиеJoke["joke"];
Исключение
Объект.ОписаниеШутки = ОписаниеОшибки();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Объект.ОписаниеШутки = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Объект.ОписаниеШутки = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Объект.ОписаниеШутки = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Возврат Неопределено;
Иначе
Возврат Неопределено;
Объект.ОписаниеШутки = "Неизвестная ошибка.";
КонецЕсли;
Исключение
Возврат Неопределено;
Объект.ОписаниеШутки = ОписаниеОшибки();
КонецПопытки;
КонецФункции
&НаСервере
Функция ПолучитьСоединениеHTTPGeekJokes(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения,,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСписокGeekJokes(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
&НаКлиенте
Процедура Декорация10Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://geek-jokes.sameerkumar.website/api?format=json");
КонецПроцедуры
#КонецОбласти
12. Гифки с анимацией да или нет.
#Область YesOrNo
&НаСервере
Процедура ПолучитьYesOrNoНаСервере()
СоответствиеYesOrNo = ОбработатьYesOrNo("/api");
Если СоответствиеYesOrNo <> Неопределено Тогда
АдресКартинкиYesOrNo = СоответствиеYesOrNo["image"];
АдресБезHTTPS = СтрЗаменить(АдресКартинкиYesOrNo, "https://yesno.wtf", "");
ДвоичныеДанныеКартинки = ОбработатьYesOrNo(АдресБезHTTPS);
КартинкаYesOrNo = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьYesOrNo(Команда)
ПолучитьYesOrNoНаСервере();
КонецПроцедуры
&НаСервере
Функция ОбработатьYesOrNo(СтрокаДляОбработки)
СтрокаПодключенияКСайтуGeek = "yesno.wtf";
СоединениеHTTP = ПолучитьСоединениеHTTPYesOrNo(СтрокаПодключенияКСайтуGeek);
HTTPЗапрос = Новый HTTPЗапрос(СтрокаДляОбработки);
Попытка
HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
Результат = HTTPОтвет.КодСостояния;
Если Результат = 200 Тогда
Попытка
Если СтрокаДляОбработки = "/api" Тогда
СтрокаJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
СоответствиеYesOrNo = ПреобразоватьJSONВСоответствиеYesOrNo(СтрокаJSON);
Возврат СоответствиеYesOrNo;
Иначе
ДвоичныеДанные = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();
Возврат ДвоичныеДанные;
КонецЕсли;
Исключение
Объект.ОписаниеШутки = ОписаниеОшибки();
Возврат Неопределено;
КонецПопытки;
ИначеЕсли Результат >= 300 И Результат < 400 Тогда
Объект.ОписаниеШутки = "Код статуса больше 3XX, Перенаправление. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 400 И Результат < 500 Тогда
Объект.ОписаниеШутки = "Код статуса больше 4XX, ошибка запроса. Код: " + Результат +"";
Возврат Неопределено;
ИначеЕсли Результат >= 500 И Результат < 600 Тогда
Объект.ОписаниеШутки = "Код статуса больше 5XX, ошибка сервера. Код: " + Результат +"";
Возврат Неопределено;
Иначе
Возврат Неопределено;
Объект.ОписаниеШутки = "Неизвестная ошибка.";
КонецЕсли;
Исключение
Возврат Неопределено;
Объект.ОписаниеШутки = ОписаниеОшибки();
КонецПопытки;
КонецФункции
&НаСервере
Функция ПолучитьСоединениеHTTPYesOrNo(СтрокаПодключения)
СоединениеHTTP = Новый HTTPСоединение(СтрокаПодключения,,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Возврат СоединениеHTTP;
КонецФункции // ()
&НаСервере
Функция ПреобразоватьJSONВСоответствиеYesOrNo(ДанныеJSON)
ЧтениеJSONОбъект = Новый ЧтениеJSON;
ЧтениеJSONОбъект.УстановитьСтроку(ДанныеJSON);
ПрочитанныйJSON = ПрочитатьJSON(ЧтениеJSONОбъект,Истина);
Возврат ПрочитанныйJSON;
КонецФункции
&НаКлиенте
Процедура Декорация11Нажатие(Элемент)
ПерейтиПоНавигационнойСсылке("https://yesno.wtf");
КонецПроцедуры
#КонецОбласти
Вот, собственно, и всё. Опять же повторюсь, все примеры очень простые и нужны лишь для ознакомления. По большей части для таких задач нужна лишь хорошая документация, в которой чётко прописан каждый атрибут, остальное зависит от полёта фантазии.