Files
kwork/README.md
2026-07-14 13:38:43 +07:00

2.9 KiB
Raw Blame History

my_parser

Парсер офферов с kwork.ru с отправкой в Telegram и возможностью добавлять новые источники.

Что умеет

  • запускается каждые X минут через APScheduler
  • читает настройки из .env
  • забирает проекты kwork.ru по списку категорий fc
  • фильтрует офферы по ключевым словам
  • фильтрует офферы по минимальной сумме
  • не отправляет уже отправленные офферы повторно
  • отправляет релевантные офферы в Telegram-канал через aiogram

Запуск

  1. Создать и заполнить .env по примеру .env.example.
  2. Установить зависимости:
pip install -r requirements.txt
  1. Запустить:
python main.py

Дополнительно можно задать MIN_PRICE_AMOUNT, чтобы пропускать только офферы с бюджетом не ниже указанного значения в рублях.

Для Telegram можно указать TELEGRAM_PROXY_URL, например socks5://user:pass@host:port или http://host:port.

Docker

Сборка образа:

docker build -t my-parser .

Запуск контейнера:

docker run --rm --env-file .env -v "$(pwd)/data:/app/data" my-parser

В образе используется multistage-сборка:

  • на этапе builder ставятся зависимости в отдельный venv
  • на этапе runtime копируются только готовое окружение и исходники

Это ускоряет пересборку, если меняется только код приложения, а requirements.txt остается прежним.

Структура

  • app/config.py - загрузка настроек
  • app/sources/base.py - базовый интерфейс источника
  • app/sources/kwork.py - реализация источника kwork
  • app/service.py - получение, фильтрация и отправка офферов
  • app/telegram.py - публикация сообщений в Telegram
  • app/state.py - хранение уже отправленных офферов

Как добавить новый сайт

  1. Создать новый класс в app/sources/, унаследованный от OfferSource.
  2. Реализовать в нем fetch_offers() с возвратом списка Offer.
  3. Подключить источник в main.py.

Для fl.ru можно будет добавить отдельный класс по той же схеме без изменений основного пайплайна.