Загрузка картинок с сайта из 1С (HTTPСоединение)

10.02.14

Интеграция - WEB-интеграция

В этой статье я объясню как сохранять картинки сайта с помощью 1С. Для этого буду использовать встроенные объекты 1С (HTTPСоединение, HTTPЗапрос, HTTPОтвет).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
СохранитьКартинкуССайта
.epf 7,12Kb
426
426 Скачать (1 SM) Купить за 1 850 руб.

У меня часто возникает задача парсинга сайтов (интернет магазинов). Естественно, что сохранять картинки - обязательный функционал любой обработки для парсинга. До версии 8.2.18 я делал так как описано в этой статье.

Но теперь я считаю тот метод парсинга в корне неверным и когда созрею для новой статьи - удалю старую.

Основы работы с HTTPСоединение выможете почитать тут

Что еще хотелось бы добавить, так это то, что у объекта HTTPОтвет есть метод ПолучитьТелоКакДвоичныеДанные()
Им то мы и воспользуемся для сохранения картинки с сайта. Если вкратце - код должен выглядить следующим образом:

    Соединение = Новый HTTPСоединение(АдресСервера);
    Запрос = Новый HTTPЗапрос(АдресКартинки);
    Ответ = Соединение.Получить(Запрос);
    ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();

Что делать с двоичными данными - я думаю ясно.

Полный код обработки Вы можете посмотреть во вложении, а также:

  1. Как отобразить картинку сайта на ПолеКартинки
  2. Как сохранить картинку в файл
  3. Как определить формат загружаемой картинки

А если подключить немного фантазии и кода - можно сохранять любые файлы (доступные для загрузки) по протоколу HTTP.

Вот и все. Ставьте плюсы, вопросы пишите в комментариях. С Вами был opx.

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18009    18    22    

17

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20150    13    19    

18

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14558    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1724    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sdn-1 133 10.02.14 18:00 Сейчас в теме
http://gortent.ru/img/dwn.png - там такой картинки вроде бы нету... ?

тем не менее ставлю +

и если автор позволит - небольшое дополнение по теме - скопировать файл к себе на локальный диск:

СсылкаФото = "http://gortent.ru/img/dwn.png";
КопироватьФайл (СсылкаФото, "С:\dwn.png");
fsgroup; user1194547; request4t; Istur; malets; vevd; Sintson; +7 Ответить
2. opx 695 10.02.14 18:18 Сейчас в теме
(1) sdn-1, Если честно - не думал, что можно так просто скопировать файл.
Но тем не менее:
1. Предложенный Вами способ не позволяет скачать файл от туда, где необходима авторизация.
2. Когда парсишь много товаров и картинок - заливать картинку через сохранение в файл дольше, нежели через двоичные данные.
А в целом: Возьму на заметку. Спасибо.
26. vevd 13.03.20 16:31 Сейчас в теме
(1) [IS-QUOTE]КопироватьФайл (СсылкаФото, "С:\dwn.png");
супер - эта строка мне очень помогла!
30. request4t 31.08.21 14:07 Сейчас в теме
(1)
любая с помощью этого кода картинка имеет размер 1 кб и не открывается. в чем может быть проблема? может из-за того, что сайт на https, а я в кодв вставляю ссылку без s?
32. yusm_proekts 11.02.22 14:25 Сейчас в теме
(30) получилось решить вопрос? "кода картинка имеет размер 1 кб и не открывается"
у меня после абсолютно любых способов - получается только такой результат.
3. jigourt 31 10.02.14 18:31 Сейчас в теме

Вариант синтаксиса: По адресу

Синтаксис:

Получить(<Источник>, <ИмяВыходногоФайла>, <Заголовки>)
Параметры:

<Источник> (обязательный)

Тип: Строка.
Адрес ресурса на сервере.
<ИмяВыходногоФайла> (обязательный)

Тип: Строка.
Имя файла, в который помещаются данные полученного ресурса.

Описание варианта метода:

Получает ресурс по адресу.
Если код статуса HTTP, возвращенный сервером, >= 400, вызывается исключение.
Показать
4. sdn-1 133 10.02.14 18:38 Сейчас в теме
Не совсем понял про авторизацию - что здесь имеется в виду ?
Есть общедоступные каталоги где все на виду - забираем что нам нужно.
6. sdn-1 133 11.02.14 08:07 Сейчас в теме
(5) deniseek77,

да - насчет авторизации понял - посмотрел ссылки на предыдущие статьи автора и ваши тоже - большое спасибо автору - тема интересная
7. DrAku1a 1747 11.02.14 10:32 Сейчас в теме
(5)не работает уже. 1С сделали более суровую авторизацию...
8. letchik2000 30.10.14 21:25 Сейчас в теме
Уважаемые программисты,
Кто-то из Вас уже решал такую задачу:
Есть файл *.хls в нем есть два поля: Артикул и Ссылка на интернет страницу которая содержит Картинку соответствующую этому артикулу. Необходимо автоматически залить картинки в Базу 1С 8.2 УТ 10.3?

Если есть готовые решения, поделитесь пожалуйста.
10. CrackedBone 01.12.14 16:55 Сейчас в теме
(8) letchik2000, если в файле есть артикул и ссылка на саму картинку, то у меня есть обработка, но если ссылка не на картинку, а на страничку, где располагается картинка, то надо дописать парсер для выделения ссылки на картинку.
11. i.s.leo 04.04.15 21:26 Сейчас в теме
(10) CrackedBone, здравствуйте! сколько стоит ваш парсер? для того, чтобы добавить фото товаров из файла xls содержащего ссылки на страницу товара на сайте поставщика в Базу 1С 8.2 УТ 10.3
13. alan53 01.06.16 15:44 Сейчас в теме
(10) CrackedBone, Здравствуйте. Как можно приобрести ваш парсер? Будет ли работать в УНФ 1.6?
9. husky 6 03.11.14 00:06 Сейчас в теме
А как быть с gif-картинкой, ее не отображает?
12. maxan 30.07.15 14:48 Сейчас в теме
Простенькая и хорошая обработочка. Скачал только для того, чтобы узнать разширение картинки. А оказывается все элементарно: создаешь картинку из двоичных данных и на этом все, далее работаешь с картинкой.
14. Serginio 941 01.06.16 17:56 Сейчас в теме
Для парсинга HTML можно использовать .Net в 1С. На примере использования HTTPClient,AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция

Вот пример поиска картинок Парсинг картинок с сайта


Для получения атрибута нужно применить следующий код

Картинки = doc.QuerySelectorAll("img[src]");

Для каждого стр из Картинки Цикл
	адрес=Врап.ПолучитьИнтерфейс(стр,"IElement").GetAttribute("src");
	
КонецЦикла
redscrest; +1 Ответить
15. whtblck 96 10.06.16 12:39 Сейчас в теме
16. hawk 66 10.03.17 08:15 Сейчас в теме
Добрый день, почему то не могу скачать нужную картинку по данной ссылки http://maki74.ru/wp-content/uploads/2016/02/102.jpg показывает только X
17. Xershi 1551 26.03.17 13:59 Сейчас в теме
(16) потому что защищенное соединение. А в примере обычное.
18. hawk 66 27.03.17 07:41 Сейчас в теме
Спасибо уже разобрался
23. jump0 7 23.05.19 09:55 Сейчас в теме
(18)
Спасибо уже разобрался

Не подскажете как разобрались? Такая же проблема. с https не могу скачать картинку.
19. miller-adm 115 26.10.17 17:58 Сейчас в теме
А если защищенное соединение - то загрузить не получится?
20. METAL 299 11.06.18 15:56 Сейчас в теме
Павел, а, наоборот, загрузить картинку из 1С на хостинг картинок (подойдёт любой), и в итоге получить ссылку на картинку - не приходилось ли решать такую задачу?
21. opx 695 11.06.18 20:15 Сейчас в теме
(20) Можно и наоборот грузить. HTTPСоединение вообще предоставляет большие возможности.
22. пользователь 18.06.18 08:24
Сообщение было скрыто модератором.
...
24. jump0 7 23.05.19 10:31 Сейчас в теме
HTTPСоединение = Новый HTTPСоединение(АдресСервера,443,,,,,Новый ЗащищенноеСоединениеOpenSSL(), Ложь);
для https - защищенного соединения.
Nikola_N; request4t; user775020; VickWood; +4 Ответить
25. dimauspeh 02.12.19 18:51 Сейчас в теме
Подскажите можно ли при помощи коннектора вызвать событие onclick у ссылки?
27. piton66 2 05.02.21 14:22 Сейчас в теме
А кто подскажет как скачивать картинки в WEBP? и просматривать их через 1С.
33. HaIIpuKoJIe 25.03.22 11:47 Сейчас в теме
(27)Добрый день. Не нашли решение? Сейчас стоит такая же задача, нужно сохранить webp на диск, а вместо этого скачивается html страница.
28. request4t 17.04.21 15:54 Сейчас в теме
Здравствуйте.

помог код

СсылкаФото = "http://gortent.ru/img/dwn.png";
КопироватьФайл (СсылкаФото, "С:\dwn.png");

спасибо автору.
29. kovaleks78 4 16.06.21 05:35 Сейчас в теме
Добрый день!

А ссылки на картинки вот в таком формате будет загружать?
http://relefopt.ru/getimage.php?guid=2a36a37b-8d71-11e3-8000-e4115bd714a8
34. vis_tmp 32 05.07.22 22:01 Сейчас в теме
(29)У вас получилось скачать по такой ссылке?
36. user1734162 23.08.22 14:37 Сейчас в теме
(34) да, по такой ссылке можно скачать. Попробуйте использовать мой код ниже.
31. request4t 31.08.21 17:27 Сейчас в теме
код с запросом подходит для https. а код с копированием файла не всегда.
35. user1734162 23.08.22 14:30 Сейчас в теме
Добрый день.
Помогите, пожалуйста, разобраться в чем дело - не показывает картинку (вместо картинки - Х). Причем картинки с других источников подгружаются корректно.
Код:
         ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
	 Соединение = Новый HTTPСоединение("cdn1.ozone.ru",,,,,, ЗащищенноеСоединение);
	 Запрос = Новый HTTPЗапрос("/s3/multimedia-q/wc1000/6306757862.jpg");
	 Ответ = Соединение.Получить(Запрос);	
	 ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();
	 АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки);
	 КартинкаРезультат = АдресВременногоХранилищаФайла;
Показать

Если сохранить картинку через 1С на диск и потом руками подтянуть к товару - все равно отображается Х
Для сохранения использую:
         ПутьДляСохранения = "G:\1\6306757862.jpg";
	 Ответ = Соединение.Получить(Запрос);
	 Ответ.ПолучитьТелоКакДвоичныеДанные().Записать(ПутьДляСохранения);
37. user1734162 23.08.22 16:28 Сейчас в теме
(35) Сейчас понял что проблема в самой картинке. Формат .webp
39. SBVoshod 29.03.23 15:07 Сейчас в теме
Всем добрый денек, может кто умный подскажет такой момент:
Есть ссыль, собственно как пример вот: https://kaspi.kz/pay/renessance?service_id=4588&7228=9874566&amount=100
В сыле зашито изображение QR в видео строки Base64.
Собственно цепляюсь я к этому делу без проблем через HTTP, сохраняю в tmp, далее разбираю через ЧтениеHTML.
И проблем особо нет, вот кусок кода, который работает:

ЧтениеHTML = Новый ЧтениеHTML;
		ЧтениеHTML.ОткрытьФайл(ВременныйФайлHTMLИмя,"UTF-8");
		ПостроительDOM = Новый ПостроительDOM;
		ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
		
		ЭлементыDOM = ДокументHTML.ПолучитьЭлементыПоИмени("div");
		
		ДанныеBase64 = Неопределено;   
		Для Каждого ЭлементDOM Из ЭлементыDOM Цикл 
			Если ЭлементDOM.ИмяКласса = "block_qr" Тогда
				Для каждого ДочУзл Из ЭлементDOM.ДочерниеУзлы Цикл
					Если ДочУзл.ИмяУзла = "img" Тогда  
						ДанныеBase64 = ДочУзл.Источник;
					КонецЕсли;    
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
Показать


Но тут выяснилось, что часть QR данный код не считывает. Стал разбираться, и уперся в стену:
смотрю получение "ДочУзл.Источник;" через отладчик и там ровно половина картинки, т.е. половина строки и все, хотя открываю сохраненный tmp-файл, который читаю, и там все ОК, картинка целая. Это какая то трабла именно 1С при чтении строк Base64?
Может кто что предложит?
Заранее спасибо.
40. SBVoshod 30.03.23 05:17 Сейчас в теме
(39) Сам спросил, сам ответил. Ну вдруг кому понадобиться.
В общем разобрался я с косяком иначе. Саму по себе проблему так и не решил.
Перечитал HTML через ТекстовыйДокумент построчно.
Получил строку с картинкой. Обрезал. Вылезла другая проблема - строка не преобразуется в двоичные данные.
Сравнил с тем, что должно быть - в полученной строке символ "+" заменен сочетанием, которое я сюда вписать не могу, потому что оно автоматом преобразуется в +. Если шо, смотрите таблицу "Таблица символов ASCII", единственное, в строке после сочетания еще ";" были.
Ну, СтрЗаменить() и вуаля, наконец то получена необходимая строка в необходимом виде.
Но всем все равно спасибки :)
Оставьте свое сообщение