Проект: Desktop-приложение на Python для автоматизации публикации объявлений на Bazoš.skТехнологии: Python, Playwright, PySide6, SQLite, Excel import/exportСтоимость второго этапа: 27 000 UAHСрок выполнения: 12–14 рабочих дней после резервирования оплаты на Сейфі і отримання чеської PSČ для probe Bazoš.cz.
1. Цель второго этапа
Расширить рабочую MVP-версию до полноценного production-инструмента для ежедневной работы менеджера на Bazoš.sk.
Stage 2 закрывает все ключевые сценарии регулярной работы: — автоматическая ротация и перепубликация объявлений; — запуск работы по расписанию без участия пользователя; — мониторинг состояния опубликованных объявлений; — управление группами аккаунтов; — двусторонняя синхронизация результатов с Excel; — поддержка любых «простых» категорий Bazoš.sk через универсальный движок (вместо одной фиксированной категории Notebooky из Stage 1).
После Stage 2 менеджер получает инструмент, который требует минимального ручного вмешательства: настроить расписание один раз → бот сам публикует, обновляет, мониторит и пишет результаты обратно в Excel.
2. Что входит во второй этап
2.1 Модуль ротации / автоматической перепубликации
— настраиваемый интервал ротации в днях: • глобальный дефолт по умолчанию 3 дня; • возможность переопределить интервал на конкретный аккаунт (например, для ноутбуков 1 день, для мелочёвки 3 дня); — логика ротации: удаление старого объявления на Bazoš → публикация нового с теми же данными (тот же title/description/фото/PSČ) → обновление ссылки в БД и Excel; — кнопка «Оновити обраний акаунт»: позволяет менеджеру вручную запустить ротацию по одному конкретному аккаунту, не затрагивая остальные; — новый статус reserve для исключения товаров из ротации: • выставляется вручную в приложении (правый клик → «Зарезервувати») или через колонку в Excel; • такие товары бот пропускает при ротации до снятия статуса; — контроль лимита 50 активных объявлений на аккаунт: • перед публикацией бот проверяет количество активных объявлений на аккаунте; • если лимит достигнут → ротация по этому аккаунту останавливается, в лог пишется уведомление, менеджер вручную решает что делать (удалить старые объявления или временно отключить аккаунт); • автоматического удаления старых объявлений бот не делает.
2.2 Модуль расписания / планировщика
— расписание на каждый аккаунт отдельно с двумя режимами: • конкретное время: например, аккаунт #1 публикует в 09:00, 13:00, 17:00; • диапазон с интервалом: например, с 09:00 до 18:00 каждые 60 минут; — автозапуск ротации по расписанию: приложение само в указанное время поднимает очередь по аккаунту, проходит по pending-товарам, делает паузы между публикациями и завершает работу; — выходные/праздники не учитываются — логика одинаковая каждый день; — просмотр расписания на вкладке «Налаштування» в виде таблицы: аккаунт → ближайший запуск → следующий запуск; — возможность временно отключить расписание по аккаунту (галочка «активно/неактивно»).
2.3 Модуль мониторинга состояния объявлений
— периодическая проверка URL опубликованных объявлений в фоне; — частота проверки настраивается в UI (по умолчанию раз в 12 часов); — для каждого URL бот определяет одно из состояний: • active — объявление доступно и активно; • inactive — объявление было удалено Bazoš, заблокировано, либо ссылка возвращает 404; — обновление статуса товара в приложении: новый статус inactive, отдельный фильтр на вкладке «Товари» для быстрого выбора всех неактивных; — журнал изменений по каждому товару: когда было опубликовано → когда стало неактивным → причина (если её можно определить по ответу Bazoš); — бот не делает автоматическую перепубликацию неактивных объявлений — это решение менеджера: он может выделить такие товары и нажать «Перезапустити обрані».
2.4 Модуль группировки аккаунтов
— произвольные пользовательские группы аккаунтов с собственными названиями (например, «Ноутбуки», «Мелка електроніка», «Авто», «Побутова техніка»); — на старте конфигурируется 2 группы, возможность добавлять новые без ограничения; — один аккаунт принадлежит ровно одной группе (не нескольким); — фильтр по группам на вкладках «Товари», «Акаунти», «Черга»; — старт/стоп очереди по конкретной группе: возможность запустить публикацию только для аккаунтов выбранной группы, не затрагивая остальные; — конфигурация групп сохраняется в БД, переносится вместе с проектом при копировании на другой ПК.
2.5 Модуль двусторонней синхронизации с Excel
— кнопка «Записати результати в Excel» на вкладке «Товари»: • выбирается исходный Excel-файл (либо запоминается последний использованный); • бот обновляет в этом файле колонки: status, published_url, published_at, error_comment; • запись только в существующие строки — структура файла не ломается; — обработка проданных/удалённых товаров: • товары со статусом sold или inactive удаляются из Excel-файла (соответствующая строка удаляется); • опционально можно включить «не удалять, помечать статусом» — переключается в настройках; — колонка product_id рекомендуется к использованию как якорь для надёжного двустороннего матчинга (если её нет — fallback на title); — синхронизация запускается только по кнопке (автоматического таймера в Stage 2 нет — добавляется при необходимости в следующих этапах).
2.6 Универсальный движок «простых категорий» Bazoš.sk
В Stage 1 поддерживалась только категория PC → Notebooky. В Stage 2 реализуется универсальный publisher, работающий с любой «простой» подкатегорией Bazoš.sk без хардкода:
— Excel поддерживает любые значения в колонках category / subcategory; — бот автоматически резолвит их в правильный URL раздела + выбор подкатегории в форме; — «простая категория» = подкатегория с базовой формой публикации (title, description, price, PSC, фото, контакт, пароль), без дополнительных специфических полей.
Гарантированное покрытие в Stage 2:
— все 20 подкатегорий из файла Palets.xlsx: • PC → Hard disky/SSD, Herné konzoly, Herné zariadenia • Elektro → Vysávače, Televízory, Projektory, Hifi/Rádiá, Vysielačky, Ostatné audio video, Ostatné drobné, Ručné šľahače/Mixéry • Foto → Videokamery • Mobily → Ostatné značky • Deti → Hračky, Nábytok pre deti • Dom a záhrada → Záhradná technika, Ostatné • Nábytok → Lampy, osvetlenie • Auto → Náhradné diely užitková — простые подкатегории Auto/Motocykle, явно упомянутые заказчиком: Náhradné diely, Tuning, Oblečenie, Ostatné (при условии что probe формы подтверждает отсутствие специфических полей); — с высокой вероятностью работает любая другая простая подкатегория в разделах PC, Elektro, Mobily, Foto, Deti, Nábytok, Dom a záhrada — поскольку движок универсальный, новые подкатегории добавляются правкой одной строки маппинга без переделки логики; — в течение 5 рабочих дней после сдачи Stage 2 заказчик может протестировать произвольную простую подкатегорию — если что-то не работает, я закрываю это бесплатно в рамках периода багфиксов.
2.7 Probe Bazoš.cz для Stage 3 (бонус, без отдельной оплаты)
В рамках Stage 2 я провожу короткий probe (1–2 часа) чешского сайта Bazoš.cz: — проверяю что словацкий аккаунт + словацкое прокси публикует на .cz без триггера повторной верификации; — проверяю что форма публикации идентична .sk (селекторы, поля, Dropzone); — по результатам фиксирую финальную цифру Stage 3 в дополнении к этому ТЗ до старта Stage 3.
Это не входит в стоимость Stage 2 как отдельная работа — побочный результат разработки универсального движка категорий.
2.8 Включаемый в период багфиксов Stage 1 пункт
В рамках периода багфиксов первого этапа (то есть до начала Stage 2 и без отдельной оплаты):
— добавление колонки product_id в UI на вкладке «Товари» для удобного поиска и идентификации товаров; — значения колонки берутся из поля product_id в Excel при импорте (как уже в Palets.xlsx с форматом #П001, #П004, #П005).
3. Что НЕ входит во второй этап
Следующие пункты согласованы как отдельные этапы или не входящие в проект вообще:
→ Stage 3 (Bazoš.cz):— полноценная публикация на Bazoš.cz с поддержкой всех 5 модулей Stage 2; — параллельный site-модуль app/sites/bazos_cz/; — расширение Excel для выбора site публикации; — live-тест на чешских PSČ; — ориентировочная стоимость: 10 000–12 000 UAH, 4–5 дней (финальная цифра после probe в Stage 2).
→ Stage 4 (масштабирование и сложные категории):— параллельная работа более 10 аккаунтов на одном ПК (пул браузерных воркеров, параллельные очереди, оптимизация GUI); — поддержка категорий с уникальными полями: Motocykle/Skútre (с объёмом двигателя, годом), Auto/Cars (полные авто), Reality (недвижимость с метражом) — если потребуются; — ориентировочная стоимость: ~22 000 UAH, 8–10 дней.
→ Stage 5 (multi-PC, опционально):— работа двух и более ПК с общей БД (PostgreSQL) для централизованного управления аккаунтами и публикациями; — синхронизация состояния между instance-ами; — ориентировочная стоимость: ~25 000 UAH, 10–12 дней.
Если для двух ПК достаточно независимой работы (разные наборы аккаунтов на каждом ПК, без синка) — Stage 5 не нужен.
→ Не входят в проект вообще (по согласованию с заказчиком): — платное продвижение / topovanie / Komerčný inzerát; — антидетект / эмуляция «отпечатков» браузера сверх текущей логики; — аналитика, отчёты, дашборды по эффективности объявлений; — категории с принципиально другими полями формы (полноценные авто, недвижимость).
4. Критерии приёмки Stage 2
Приёмка проводится по чек-листу:
Модуль ротации:— [ ] настраивается интервал ротации глобально и на аккаунт; — [ ] кнопка «Оновити обраний акаунт» запускает ротацию только по выбранному аккаунту; — [ ] товары со статусом reserve пропускаются; — [ ] при достижении лимита 50 объявлений ротация по аккаунту останавливается и пишется в лог.
Модуль расписания:— [ ] на аккаунт можно задать расписание в двух режимах (конкретное время / диапазон с интервалом); — [ ] приложение само запускает ротацию по расписанию; — [ ] таблица расписания на вкладке «Налаштування» отображает ближайшие запуски.
Модуль мониторинга:— [ ] периодическая проверка URL запускается по таймеру; — [ ] частота проверки настраивается в UI; — [ ] неактивные объявления получают статус inactive; — [ ] на вкладке «Товари» работает фильтр по статусу inactive.
Модуль групп:— [ ] можно создать минимум 2 группы и привязать к ним аккаунты; — [ ] фильтры по группам работают на всех вкладках; — [ ] старт/стоп очереди по группе запускает публикацию только аккаунтов этой группы.
Модуль Excel-синхронизации:— [ ] кнопка «Записати результати в Excel» обновляет нужные колонки в исходном файл