Объектная модель мониторинга цен

Эта статья демонстрирует, что находится «под капотом» программы-парсера, — для тех, кому это интересно.

PriceMonitor [PriceMonitor] Корневой объект модуля мониторинга цен конкурентов

Name [String] Имя конфигурации мониторинга цен

filename [String] Путь к файлу настроек мониторинга

Version [String] Версия настроек мониторинга цен

AppVersion [Long] Версия программы, в которой сохранены настройки

MinAppVersion [Long] Минимально необходимая версия программы

FileFormat [Long] Версия формата файла настроек

Options [PriceMonitorOptions] Общие параметры запуска, обработки ссылок и вывода статусов

DefaultLoadMode [LOAD_MODE] Способ загрузки страниц по умолчанию (WinInet, WinHTTP, IE, Browser)

FirstDataRow [Long] Номер первой строки с данными на листе Excel

Pause [Single] Минимальная пауза между запросами в секундах

OptionsDefaultColumn [String] Столбец с опциями товара по умолчанию (номер или смещение)

DefaultProxy [String] Адрес прокси-сервера по умолчанию

ExtraSubdomains [String] Список нестандартных доменов второго уровня

UseDiscountPrice [Boolean] Использовать цену со скидкой (price_discount) вместо обычной

ShowErrors [Boolean] Выводить всплывающие уведомления об ошибках

Workbook_Filename [String] Путь к файлу Excel со ссылками

Workbook_Open [Boolean] Открывать файл Excel автоматически при запуске

Workbook_Save [Boolean] Сохранять изменения в книге после завершения

AllSheets [Boolean] Перебирать все листы активной книги

Format_AlignH [Boolean] Выравнивать значения по центру по горизонтали

Format_AlignV [Boolean] Выравнивать значения по центру по вертикали

Stock1_Text [String] Текст при наличии товара (по умолчанию: есть)

Stock0_Text [String] Текст при отсутствии товара (по умолчанию: нет)

StockErr_Text [String] Текст, если наличие не распознано (по умолчанию: ??)

PriceNotFound_Text [String] Текст ошибки, если цена не найдена (#нет цены#)

LoadPageError_Text [String] Текст при сбое загрузки страницы (#ошибка#)

Error404_Text [String] Текст при ошибке 404 (#ссылка#)

Error403_Text [String] Текст при ошибке 403 (#доступ#)

ExtraInfoEnabled [Boolean] Выводить служебную информацию (время запуска) в строку листа

ExtraInfoRow [Long] Номер строки для вывода служебной информации

ExtraInfoData [String] Шаблон вывода служебной информации

domains [PriceMonitorDomains] Коллекция настроенных сайтов (доменов) конкурентов

Items [PriceMonitorDomain] Настройки парсинга конкретного домена

index [Long] Порядковый номер домена в списке

DomainName [String] Адрес домена (например, site.ru)

Enabled [Boolean] Активен ли парсер для данного домена

LoadMode [LOAD_MODE] Способ загрузки страниц для домена

Browser_Headless [Boolean] Запускать браузер в фоновом (скрытом) режиме

ProxyEnabled [Boolean] Использовать прокси-сервер для этого сайта

SpecialPause [Single] Индивидуальная пауза между запросами

SpecialTimeout [Long] Индивидуальный таймаут ожидания ответа сервера

OptionsEnabled [Boolean] Включен ли выбор цены по опции товара (артикул, объем и т.п.)

OptionsColumn [String] Столбец с опцией товара для данного домена

CaptchaSignature [String] Текст на странице, вызывающий обработчик капчи

SaveFieldValuesToVariables [Boolean] Сохранять значения вычисленных полей в переменные

SpecialColumnsEnabled [Boolean] Переопределять общие столбцы вывода для этого домена

PriceRateEnabled [Boolean] Выводить цены в виде формул умножения на коэффициент

PriceMultiplier [String] Множитель цены (ячейка, именованный диапазон или переменная)

CropHyperlinkAtChar [String] Символ или текст для обрезки гиперссылки

CheckStatus [Long] Статус проверки работоспособности настроек сайта

Comment [String] Комментарий к настройкам домена

DataArray [Variant] Двумерный массив ссылок домена для обработки

Fields [PriceMonitorFields] Коллекция извлекаемых полей товара (цена, наличие и др.)

Items [PriceMonitorField] Настройки извлечения конкретного поля

index [Long] Порядковый номер поля

ID [String] Идентификатор поля (price, price_discount, priceold, stock и др.)

Enabled [Boolean] Активно ли вычисление поля

Comment [String] Описание или комментарий к полю

DateLastModified [Long] Дата последнего изменения поля (UNIX timestamp)

Actions [ArrayActions] Цепочка действий для извлечения значения поля из HTML

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий

LoadActions [ArrayActions] Дополнительные действия при загрузке страницы товара

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий

AASets [ActionSets] Наборы действий домена (например, Parser_OnCaptcha)

Items [ActionSet] Отдельный набор действий

Actions [ArrayActions] Список действий внутри набора

Variables [Variables] Локальные переменные домена (логин, пароль и др.)

Items [Variable] Отдельная переменная домена

SpecialColumns [PriceMonitorColumns] Индивидуальные столбцы вывода результатов для данного домена

Items [PriceMonitorColumn] Настройка вывода отдельного столбца

Stats [PriceMonitorStats] Статистика скорости и объемов загрузки для домена

LoadTime [Double] Среднее время загрузки исходных данных (мс)

PageTime [Double] Время выполнения HTTP-запроса (мс)

FieldsTime [Double] Время вычисления всех полей (мс)

Duration [Double] Суммарное время загрузки и парсинга (мс)

TotalTime [Double] Полное время обработки ссылки с учетом вывода на лист (мс)

PageSize [Double] Средний размер загружаемой страницы в байтах

Parser [WebsiteParser] Движок парсера, создаваемый в рантайме или прикрепленный к домену

Columns [PriceMonitorColumns] Общие настройки столбцов для вывода результатов на лист Excel

Items [PriceMonitorColumn] Отдельный столбец вывода относительно ячейки со ссылкой

Enabled [Boolean] Включен ли вывод в данный столбец

Column [Long] Смещение столбца (1 — ячейка со ссылкой, 2 — столбец правее и т.д.)

Source [String] Код поля (%price%, %stock%, %PRICE-IF-INSTOCK%) или формула

color [PriceMonitorColorOptions] Настройки условного форматирования и подсветки цен

Enabled [Boolean] Включена ли цветовая подсветка цен

BaseColumn [Long] Номер столбца с базовой (нашей) ценой

FirstColumn [Long] Начальный столбец диапазона подсветки

FilterRow [Long] Номер строки заголовков для фильтрации столбцов

FilterMask [String] Маска заголовка столбца (например, *.*)

ColorIfLess [Long] Цвет заливки, если цена конкурента ниже базовой

ColorIfMore [Long] Цвет заливки, если цена конкурента выше базовой

ExtraColorSettings [Boolean] Использовать расширенные правила условного форматирования

SimpleFormulas [Boolean] Использовать упрощенные шаблоны формул (УНАСДОРОЖЕ / УНАСДЕШЕВЛЕ)

IconsEnabled [Boolean] Отмечать изменившиеся цены значками (иконками)

IconSet [Byte] Номер набора значков Excel

Actions [ArrayActions] Список действий с пользовательскими правилами УФ

Variables [Variables] Общие переменные конфигурации мониторинга цен

Items [Variable] Отдельная переменная (например, курс валюты или коэффициент)

Counters [PriceMonitorCounters] Счетчики и сводная статистика ссылок и доменов при запуске

LinksTotalCount [Long] Общее количество найденных на листе ссылок

LinksToProcess [Long] Количество ссылок, взятых в обработку

Domains_Found [Dictionary] Словарь всех доменов, найденных на листе

Domains_Configured [Dictionary] Словарь всех настроенных доменов

Domains_WithoutLinks [Dictionary] Настроенные домены, для которых не найдены ссылки на листе

Domains_ToProcess [Dictionary] Домены, готовые к запуску обработки

Domains_ToSetup [Dictionary] Домены со ссылок на листе, для которых еще нет настроек

Domains_Ignored [Dictionary] Настроенные домены, пропущенные пользователем при выборе

Domains_ChosenToRun [Dictionary] Домены, выбранные пользователем в диалоговом окне

Детальное описание узлов и связей объектной модели PriceMonitor

1. Архитектура сайтов и полей данных (PriceMonitorDomains → PriceMonitorDomain → PriceMonitorFields)

Основу конфигурации мониторинга цен составляет иерархия доменов и настроенных для них правил извлечения данных:

  • PriceMonitorDomains — управляющая коллекция всех настроенных сайтов (Items). Отвечает за фильтрацию собранных на листе ссылок по доменам, вызов диалога выбора сайтов (SelectedInDialogWindow) и последовательный запуск обработки каждого домена.
  • PriceMonitorDomain — конфигурация конкретного сайта (DomainName). Хранит индивидуальный способ загрузки (LoadMode), настройки прокси (ProxyEnabled), паузы (SpecialPause), таймауты (SpecialTimeout), правила считывания опций товара (OptionsColumn), а также собственные наборы действий (AASets) и переменные (Variables).
  • PriceMonitorFields и PriceMonitorField — коллекция извлекаемых параметров товара (цена price, старая цена priceold, наличие avail и др.). Каждый объект PriceMonitorField содержит цепочку действий ArrayActions, которая преобразует HTML-код страницы в готовое значение поля, после чего формируется единый JSON-ответ с метаданными запроса.
  • PriceMonitorStats — вложенный объект статистики домена, фиксирующий скорость обработки (ссылок в минуту), среднее время загрузки страницы, время вычисления полей и размер скачиваемого HTML.

2. Связь с движком WebsiteParser

  • Встраивание парсера (Parser) — внутри каждого PriceMonitorDomain находится свойство Parser типа WebsiteParser. При запуске мониторинга для каждого домена программно создается и настраивается временный экземпляр WebsiteParser (метод CreateParser), куда передаются таймауты, паузы, наборы действий, переменные и настройки прокси.
  • Загрузка страниц (LoadActions) — действия по загрузке HTML-кода страницы (LoadActions) транслируются в Parser.SourceData.Actions, благодаря чему для скачивания страниц используется стандартный механизм выполнения действий ядра парсера.

3. Вывод результатов и визуализация (PriceMonitorColumns и PriceMonitorColorOptions)

  • PriceMonitorColumns и PriceMonitorColumn — определяют правила записи полученных данных в ячейки Excel относительно исходной ячейки со ссылкой (Column = 1 — сама ячейка со ссылкой, 2 — столбец правее и т.д.). Поддерживают подстановку значений полей (%price%, %PRICE-IF-INSTOCK%), умножение цены на коэффициент (PriceMultiplier), обрезку гиперссылок и вывод статусов ошибок (#нет цены#, #ошибка#).
  • SpecialColumns — необязательная коллекция PriceMonitorColumns на уровне отдельного домена, позволяющая переопределить общие правила вывода столбцов для конкретного сайта.
  • PriceMonitorColorOptions — модуль визуального анализа цен. Автоматически создает и применяет правила условного форматирования (FormatCondition) для подсветки цен конкурентов, которые ниже (ColorIfLess) или выше (ColorIfMore) базовой цены, а также управляет значками изменения цены (IconSetCondition).

4. Общие настройки и счетчики выполнения (PriceMonitorOptions, PriceMonitorCounters, Variables)

  • PriceMonitorOptions — глобальные параметры конфигурации: режим загрузки по умолчанию (DefaultLoadMode), стартовая строка таблицы (FirstDataRow), тексты статусов наличия (Stock1_Text, Stock0_Text), настройки автооткрытия и сохранения книги Excel, а также вывод служебной информации о времени запуска (ExtraInfoEnabled).
  • PriceMonitorCounters — служебный объект статистики текущего сеанса работы. Распределяет найденные на листе ссылки и домены по категориям: готовые к обработке (Domains_ToProcess), не настроенные (Domains_ToSetup), без ссылок на листе (Domains_WithoutLinks) и пропущенные (Domains_Ignored).
  • Variables — коллекция общих переменных конфигурации (Variable), доступных во всех доменах и формулах расчета (например, для хранения курсов валют или общих параметров).