Skip to content

Latest commit

 

History

History
165 lines (124 loc) · 6.42 KB

File metadata and controls

165 lines (124 loc) · 6.42 KB

Price Tracker - Следене на цени от онлайн магазини

Десктоп приложение (Python + PyQt6) за автоматично следене и събиране на информация за цени на продукти от различни онлайн магазини.

📋 Функционалност

  • Добавяне и управление на продукти - URL адрес + CSS селектор / XPath
  • Автоматично събиране на данни - периодична проверка на цените във фонов режим
  • Ръчно обновяване - опресняване на цените по желание
  • Визуализация на данни - таблица с продукти + графика на ценовата история
  • Известяване при промяна - Email и Discord известия при спад на цена
  • Импорт/Експорт - CSV и JSON формат за данни и история
  • Drag-and-drop - плъзгане на URL адреси директно в приложението
  • Сигурност - поддръжка на Environment Variables за чувствителни данни

🚀 Инсталация

Предварителни изисквания

  • Операционна система: Windows 10+, macOS 10.15+, или Linux
  • Python: 3.10 или по-нова версия
  • Браузър: Google Chrome (за Selenium функционалност)

Стъпка по стъпка инсталация

1. Проверете версията на Python

python --version

Ако Python не е инсталиран, изтеглете от: https://www.python.org/downloads/

2. Клонирайте или изтеглете проекта

git clone <repository-url>
cd Project

3. Създайте виртуална среда (препоръчително)

Windows:

python -m venv venv
venv\Scripts\activate

Linux/macOS:

python3 -m venv venv
source venv/bin/activate

4. Инсталирайте зависимостите

Основни зависимости:

pip install -r requirements.txt

За разработка (тестове, linting, type checking):

pip install -r requirements-dev.txt

Отстраняване на проблеми

PyQt6 не се инсталира

pip install --upgrade pip
pip install PyQt6

Selenium изисква Chrome WebDriver

WebDriver се изтегля автоматично чрез webdriver-manager. Уверете се, че имате интернет връзка.

Грешка при импорт на lxml (Windows)

pip install lxml
# или
pip install lxml --only-binary=:all:

SSL грешки

pip install certifi

⚙️ Конфигурация

Приложението поддържа два начина за конфигуриране на чувствителни данни (като Discord Webhook):

  1. Environment Variables (Препоръчително):

    • Копирайте .env.example в .env (ако ползвате python-dotenv) или задайте променливите в средата.
    • DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
  2. Локален файл:

    • Копирайте data/settings.example.json в data/settings.json.
    • Попълнете данните си там. Този файл е игнориран от git.

📖 Използване

Стартиране на приложението

python -m price_tracker.main
# (Уверете се, че сте в главната директория на проекта)

Добавяне на продукт

  1. Кликнете "➕ Добави" в toolbar-а
  2. Въведете URL адреса на продукта
  3. Въведете CSS селектор за цената (вижте таблицата по-долу)
  4. Тествайте селектора с бутона "Тествай селектора"
  5. Запазете

Примерни CSS селектори (Тествани)

Магазин CSS Селектор Бележка
Ozone.bg .regular-price Стандартна цена
Technopolis.bg .price Изисква Selenium
Technomarket.bg .bgn.eu Изисква Selenium
Amazon.com #corePrice_feature_div .a-price .a-offscreen Основна цена
Amazon.com .a-price .a-offscreen Алтернативен селектор

Автоматично следене

  1. Кликнете "▶️ Старт" за да активирате автоматичната проверка
  2. Интервалът може да се конфигурира от Редакция → Настройки

🧪 Тестове

Проектът има високо покритие на тестовете (94%), включващо всички основни модули (без GUI).

# Изпълняване на всички тестове
pytest tests/ -v

# Проверка на покритието
coverage run -m pytest tests/
coverage report -m

📁 Структура на проекта

Project/
├── price_tracker/       # Основен Python пакет
│   ├── models/          # Модели на данни (Product, PriceRecord)
│   ├── scraper/         # Scraping модули (HTTP + Selenium)
│   ├── storage/         # JSON/CSV съхранение и експорт
│   ├── notifications/   # Email/Discord известия
│   ├── scheduler/       # Фонова проверка (APScheduler)
│   └── gui/             # PyQt6 графичен интерфейс
├── tests/               # Unit тестове (139+ теста)
├── data/                # Локални данни (игнорирани от git)
│   └── settings.example.json # Примерни настройки
├── exports/             # Експортирани файлове (игнорирани)
├── requirements.txt     # Зависимости
└── pyproject.toml       # Конфигурация на проекта

📜 Лиценз

MIT License