dobrovolskiy.com
EN
← все проектыданные · 2026

bgwatch: монитор авиатарифов

Наблюдатель за ценами на авиабилеты туроператора с временными рядами, обнаружением изменений и оповещениями через MQTT

Python-сервис, который опрашивает эндпоинты тарифов Библио-Глобус (bgoperator.ru) для чартерных и регулярных рейсов, приводит две разные JSON-схемы к одной модели, сохраняет только реальные изменения цен в...

Python-сервис, который опрашивает эндпоинты тарифов Библио-Глобус (bgoperator.ru) для чартерных и регулярных рейсов, приводит две разные JSON-схемы к одной модели, сохраняет только реальные изменения цен в гипертаблицу TimescaleDB и публикует оповещения с ограничением частоты (минимум за 7 дней, падение >=5%, ценовой порог) через MQTT для Telegram-бота и Grafana.

Транспорт авторизации учитывает особенности оператора: обязательный gzip, сессионная cookie, меняющаяся с каждым ответом, и ответы «unauthorized» с HTTP 200.

Сборщик cookie на Playwright и перехватчик XHR служат запасным вариантом без учетных данных.

Что умеет

  • Клиент авторизации с состоянием: ротация cookie Z1, одна повторная авторизация и один повтор при SR001, cookie-файл на диске, режимы с учетными данными и только с cookie
  • Нормализатор, принимающий оба документированных формата ответа (багаж списком или багаж строкой + бренд) и громко падающий при расхождениях
  • Движок обнаружения изменений: запись только при изменении, исчезнувшее предложение считается событием инвентаря, а не ростом тарифа
  • Правила оповещений (минимум за 7 дней, падение >=5%, порог) с лимитом 1 раз в час на каждое наблюдение, публикация в MQTT
  • Схема гипертаблицы Timescale + таблица наблюдений
  • Сборщик на Playwright, для которого был разобран отдельный GraphQL-подобный API публичного фронтенда и его клиентская хэш-защита
  • 57 офлайн-тестов на pytest с мок-транспортом (сеть не нужна)

Четкое разделение транспорта авторизации и разбора данных; жесткое правило никогда не парсить HTML; аккуратная работа с недружелюбным сторонним API; компактный сервис (<150 МБ RSS), рассчитанный на встраивание в существующую инфраструктуру Timescale/EMQX/Grafana. Не завершен (живого опроса пока нет).

Нужно что-то похожее?

Делаю это вживую на звонке в Zoom / Яндекс Телемост, вы смотрите на экран, таймер останавливается по вашему слову. Первые 15 минут бесплатно.

Ещё проекты

Облачные контроллеры FOURLEDSКонтроллеры освещения с сотовой связью для фасадов исторических зданий: шесть плат в KiCad, прошивка на ESP-IDF, сервер управления парком, дашбордСверхлегкий просмотрщик IP-камерСверхлёгкий многокамерный просмотрщик и регистратор RTSP: десятки камер на одном слабом ПК или сервере написанный на чистом C.RYTA: маркетплейс грузоперевозок и спецтехникиОфлайн-ориентированная биржа грузов и транспорта с OTA-обновлениями для Android, веба и мессенджера MAX