Как автоматически спарсить XML-файл с курсами валют с веб-страницы в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разберем задачу автоматизации получения данных, когда на веб-странице есть ссылка на XML-файл, но мы хотим избежать трудоемкого процесса парсинга всего HTML-кода страницы. Наша цель — получить прямой доступ к данным XML для последующей обработки в 1С.

Анализ сетевого запроса: самый надежный путь

Прежде чем приступать к написанию кода для анализа HTML-документа, проанализируем, как именно сайт отдает данные. Часто разработчики пытаются имитировать поведение пользователя: открыть страницу, найти нужную ссылку, кликнуть по ней. Однако это избыточно и ненадежно, так как изменения в верстке страницы приведут к поломке кода.

Рассмотрим шаги для анализа:

  1. Откроем нужную страницу в браузере.
  2. Нажмем клавишу F12 для вызова инструментов разработчика.
  3. Перейдем на вкладку «Сеть» (Network).
  4. Обновим страницу и найдем в списке запросов тот, который ведет к загрузке XML-файла.
  5. Скопируем этот адрес. Скорее всего, путь к файлу является статическим или меняется по предсказуемому алгоритму.

Если путь к файлу фиксирован, мы можем обращаться к нему напрямую через HTTPСоединение. Это позволит нам получить файл сразу, минуя лишние операции.

Использование HTTP-запросов в 1С

Разберем пример реализации прямого получения файла. Для этих целей лучше всего использовать стандартные объекты HTTPСоединение и HTTPЗапрос. Они обеспечивают стабильную работу с протоколами передачи данных.

Посмотрим на пример кода, который позволяет скачать файл по прямой ссылке:


// Определяем параметры соединения
Сервер = "валюты.сайт.ру";
ПутьКФайлу = "/files/rates.xml";

// Создаем соединение
Соединение = Новый HTTPСоединение(Сервер, 443, , , Новый ЗащищенноеСоединениеOpenSSL());

// Формируем запрос
Запрос = Новый HTTPЗапрос(ПутьКФайлу);

// Выполняем запрос и сохраняем ответ в файл
Ответ = Соединение.Получить(Запрос, "C:\Temp\rates.xml");

Если Ответ.КодСостояния = 200 Тогда
    // Далее работаем с полученным файлом
    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл("C:\Temp\rates.xml");
    // Обработка XML...
КонецЕсли;

Как быть, если ссылка на XML все же динамическая?

Если адрес файла меняется, например, в нем зашифрована текущая дата, нам все же придется получить этот адрес из HTML. В этом случае не используйте регулярные выражения, так как они крайне уязвимы к смене структуры верстки сайта.

Рекомендуемые подходы:

Архитектурные рекомендации по автоматизации

Чтобы система была максимально устойчивой, проанализируем ситуацию комплексно. Если сайт часто обновляет структуру, а логика получения данных усложняется, самым правильным решением будет вынос парсинга за пределы конфигурации 1С.

Разберем вариант с использованием промежуточного скрипта:

  1. Напишем простой скрипт на языке Python или PHP, который будет запускаться по расписанию через планировщик задач операционной системы.
  2. Скрипт будет скачивать XML и сохранять его в общую папку или передавать в 1С через HTTP-сервис.
  3. 1С будет только принимать готовые данные, что значительно упрощает поддержку кода и исключает зависимость от изменений верстки на сайте.

Таким образом, мы рассмотрели несколько стратегий: от прямого HTTP-запроса, который является предпочтительным, до работы с DOM-моделью и использования внешних скриптов для сложных случаев. Выбирайте тот метод, который соответствует текущим задачам и архитектуре вашей информационной системы.

← На главную