Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Парсер вебшопа поставщика с уведомлениями в Telegram

Сервис круглосуточно отслеживает ассортимент закрытого вебшопа поставщика (florashopping.nl): по расписанию собирает каталог, сохраняет историю цен и остатков в PostgreSQL и присылает в Telegram сигналы о выгодных изменениях. Управление — прямо в Telegram-боте, без правки кода и конфигов.

Сервис работает строго в режиме чтения: кнопки покупки и корзина не затрагиваются ни при каких условиях.

Сигналы

Сигнал Когда приходит
🆕 Новая позиция товар впервые появился в каталоге
🔥 Критическое падение цены цена упала в N раз (по умолчанию 2×, настраивается)
🏆 Исторический минимум побит цена ниже минимума за всю историю наблюдений
🔄 Снова в наличии количество стало больше нуля после нуля
🎯 Цена ниже желаемой для позиций из вашего списка отслеживания

В каждом сообщении: название и сорт, цена (для обвала — старая, новая и % скидки), параметры растения, наличие, хештег и прямая ссылка на карточку. Повторные сигналы отсекаются: один и тот же сигнал не приходит чаще, чем раз в 24 часа (окно настраивается), «новинка» — только один раз. При аномально большом количестве однотипных сигналов за цикл бот присылает первые 30 подробно и одну сводку по остальным.

Расписание

Раз в час с 9:00 до 21:00 и раз в 2 часа с 22:00 до 8:00 по Москве. Один цикл занимает 8–10 минут: парсер ходит по сайту с паузами, чтобы не создавать нагрузку.

Управление через бота

  • /admin — панель управления (доступна только администраторам из .env):
    • Минус-слова — добавить/удалить/посмотреть; товары с этими словами не попадают в минимумы и не порождают сигналы. Стартовый список (50 слов) загружается автоматически при первом запуске.
    • Триггеры цен — порог обвала (пресеты или своё значение), чувствительность минимума, окно дедупликации.
    • Типы уведомлений — тумблеры 🟢/🔴 для новинок, обвала и минимума.
    • Список отслеживания — добавить позицию по ID, задать желаемую цену, удалить из списка.
  • /scan — внеплановый запуск цикла с прогресс-баром (для проверки).

Установка

Требуются Docker и Docker Compose v2 (на Linux-сервере: apt install docker.io docker-compose-v2 или официальный скрипт docker.com).

cp .env.example .env     # заполнить доступы и токены, см. таблицу ниже
docker compose up -d --build
docker compose logs -f app
Переменная Что это
SHOP_BASE_URL адрес вебшопа
SHOP_USERID, SHOP_PASSWORD логин и пароль от вебшопа
SHOP_VOORCOD код раздела каталога (22 — комнатные растения)
REQUEST_DELAY_SECONDS пауза между запросами к сайту (по умолчанию 0.7)
TELEGRAM_BOT_TOKEN токен бота от @BotFather
TELEGRAM_CHAT_ID куда слать сигналы (id чата/группы/канала)
ADMIN_USER_IDS id администраторов через запятую

Быстрая самодиагностика (конфиг + база + схема):

docker compose run --rm app python -m webshop.app --check

Первый цикл — «базовый»: каталог целиком записывается в базу, сигналы «новинка» за него не рассылаются.

Эксплуатация

  • Контейнеры перезапускаются сами (restart: unless-stopped), данные живут в docker-томе pgdata и переживают перезапуски и обновления.
  • При падении сайта, ошибке авторизации или изменении вёрстки сервис не останавливается: ошибка пишется в лог и приходит администраторам в Telegram.
  • Обновление версии: заменить файлы, docker compose up -d --build.
  • Логи: docker compose logs -f app.

Как устроено

Python 3.12, requests + BeautifulSoup, python-telegram-bot v21, PostgreSQL 16.

Модуль Ответственность
site_client вход на сайт, чтение каталога и карточек, авто-перелогин
catalog_parser разбор HTML в структуры данных
storage вся работа с PostgreSQL
scanner цикл сбора: каталог → детали → база
triggers правила сигналов «если → то»
notifier формирование сообщений, отправка, дедупликация
admin_bot меню /admin и /scan
scheduler расписание по Москве

Таблицы БД: products (характеристики позиций), product_stocks (почасовые срезы цен и остатков), product_price_floors (исторические минимумы), negative_words, tracked_products, settings, sent_notifications. Схема создаётся автоматически при старте.

Тесты (75 шт., включая разбор реальных страниц сайта):

docker compose up -d db
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors