https://github.com/edwards359/pem08
https://github.com/edwards359/pem08
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/edwards359/pem08
- Owner: Edwards359
- Created: 2025-12-12T20:00:33.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-12-12T20:11:27.000Z (7 months ago)
- Last Synced: 2026-01-19T07:41:19.679Z (5 months ago)
- Language: Python
- Size: 136 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🔍 Мониторинг конкурентов - AI Ассистент
[](https://www.python.org/)
[](https://fastapi.tiangolo.com/)
[](https://proxyapi.ru/)
[](LICENSE)
MVP приложение для анализа конкурентной среды с поддержкой мультимодальности (текст и изображения). Использует Proxy API для доступа к OpenAI моделям без VPN.
## 📋 Описание
**Мониторинг конкурентов** — это мультимодальный AI-ассистент, который помогает анализировать конкурентную среду. Приложение может анализировать текстовый контент, изображения (баннеры, сайты, упаковку) и автоматически парсить веб-страницы конкурентов.
### Основные возможности
- ✅ **Анализ текста конкурентов** — получайте структурированную аналитику с сильными/слабыми сторонами, уникальными предложениями и рекомендациями
- ✅ **Анализ изображений** — анализируйте баннеры, скриншоты сайтов, упаковки товаров с оценкой визуального стиля и маркетинговыми инсайтами
- ✅ **Парсинг веб-сайтов** — автоматически извлекайте и анализируйте контент по URL через Selenium
- ✅ **История запросов** — последние 10 запросов сохраняются для быстрого доступа
- ✅ **Отслеживание прогресса** — Server-Sent Events для отслеживания статуса длительных операций
- ✅ **Интерактивный веб-интерфейс** — удобный UI для всех функций
## 🚀 Быстрый старт
### Системные требования
- **Python 3.9+** (рекомендуется 3.10 или выше)
- **Chromium-браузер** (Google Chrome, Vivaldi, Microsoft Edge) для парсинга через Selenium
- **Proxy API ключ** (получить на [https://proxyapi.ru/](https://proxyapi.ru/))
- **Интернет-соединение** для работы AI и парсинга сайтов
### 1. Клонирование репозитория
```bash
git clone
cd PEm08
```
### 2. Установка зависимостей
```bash
# Создайте виртуальное окружение
python -m venv venv
# Активируйте окружение
# Windows PowerShell:
.\venv\Scripts\Activate.ps1
# Windows CMD:
venv\Scripts\activate.bat
# Linux/macOS:
source venv/bin/activate
# Установите зависимости
pip install --upgrade pip
pip install -r requirements.txt
```
### 3. Установка браузера
Поддерживаются следующие браузеры (любой из них):
- **Google Chrome** (рекомендуется) — [скачать](https://www.google.com/chrome/)
- **Vivaldi** — [скачать](https://vivaldi.com/)
- **Microsoft Edge** — обычно уже установлен в Windows
**Примечание:** ChromeDriver будет установлен автоматически через Selenium Manager при первом запуске.
### 4. Настройка переменных окружения
Создайте файл `.env` в корне проекта:
```bash
# Windows PowerShell
Copy-Item env.example.txt .env
# Linux/macOS
cp env.example.txt .env
```
Откройте `.env` и заполните:
```env
# Обязательно: Ваш Proxy API ключ (получить на https://proxyapi.ru/)
PROXY_API_KEY=your_proxy_api_key_here
# Базовый URL Proxy API (можно не менять)
PROXY_API_BASE_URL=https://openai.api.proxyapi.ru/v1
# Модели OpenAI через Proxy API (формат: openai/название-модели)
OPENAI_MODEL=openai/gpt-4o-mini
OPENAI_VISION_MODEL=openai/gpt-4o-mini
DALL_E_MODEL=openai/dall-e-3
# Настройки API сервера
API_HOST=0.0.0.0
API_PORT=8000
# Опционально: Путь к браузеру (если не найден автоматически)
# BROWSER_BINARY_PATH=C:\Program Files\Google\Chrome\Application\chrome.exe
```
### 5. Запуск приложения
```bash
# Убедитесь, что виртуальное окружение активировано
python run.py
```
Приложение будет доступно по адресу: **http://localhost:8000**
📖 **Подробная инструкция по установке:** см. [INSTALL.md](INSTALL.md)
## 📁 Структура проекта
```
PEm08/
├── backend/ # Backend код
│ ├── __init__.py
│ ├── main.py # FastAPI приложение с эндпоинтами
│ ├── config.py # Конфигурация и настройки
│ ├── models/ # Pydantic модели
│ │ ├── __init__.py
│ │ └── schemas.py # Схемы данных для API
│ └── services/ # Бизнес-логика
│ ├── __init__.py
│ ├── openai_service.py # Работа с Proxy API (OpenAI-совместимый)
│ ├── parser_service.py # Парсинг веб-страниц через Selenium
│ ├── history_service.py # Управление историей запросов
│ └── progress_service.py # Отслеживание прогресса задач
├── frontend/ # Frontend код
│ ├── index.html # HTML страница с интерфейсом
│ ├── styles.css # Стили CSS
│ └── app.js # JavaScript логика
├── requirements.txt # Python зависимости
├── env.example.txt # Пример .env файла
├── .env # Файл конфигурации (создать самостоятельно)
├── history.json # Файл истории (создаётся автоматически)
├── README.md # Этот файл
├── INSTALL.md # Подробная инструкция по установке
├── run.py # Скрипт запуска сервера
└── docs.md # Документация API
```
## 🔧 Функциональность
### 1. Анализ текста (`POST /analyze_text`)
Анализирует текстовый контент конкурентов и возвращает структурированную аналитику.
**Входные данные:**
- Текст для анализа (минимум 10 символов)
**Выходные данные:**
- **Сильные стороны** — список сильных сторон конкурента
- **Слабые стороны** — список слабых мест
- **Уникальные предложения** — что выделяет конкурента
- **Рекомендации** — рекомендации по улучшению вашей стратегии
- **Резюме** — краткое общее резюме анализа
**Пример использования:**
```bash
curl -X POST "http://localhost:8000/analyze_text" \
-H "Content-Type: application/json" \
-d '{
"text": "Наша компания предлагает уникальные решения в области автоматизации бизнес-процессов..."
}'
```
### 2. Анализ изображений (`POST /analyze_image`)
Анализирует изображения (баннеры, сайты, упаковку) и возвращает маркетинговые инсайты.
**Входные данные:**
- Изображение (JPEG, PNG, GIF, WebP)
**Выходные данные:**
- **Описание** — детальное описание изображения
- **Маркетинговые инсайты** — список инсайтов о маркетинговой стратегии
- **Оценка визуального стиля** — числовая оценка от 0 до 10
- **Анализ визуального стиля** — детальный анализ цветов, типографики, композиции
- **Рекомендации** — рекомендации по улучшению
**Пример использования:**
```bash
curl -X POST "http://localhost:8000/analyze_image" \
-F "file=@banner.jpg"
```
### 3. Парсинг веб-сайтов (`POST /parse_demo`)
Извлекает контент с веб-страницы и автоматически анализирует его.
**Входные данные:**
- URL веб-страницы
**Выходные данные:**
- **ParsedContent** — структурированные данные:
- `title` — заголовок страницы
- `h1` — главный заголовок
- `first_paragraph` — первый абзац
- `full_text` — полный текст страницы
- `analysis` — анализ текстового контента
- `task_id` — ID задачи для отслеживания прогресса
**Особенности:**
- Использует Selenium для рендеринга JavaScript
- Извлекает мета-теги, ссылки, заголовки, изображения
- Отслеживание прогресса через Server-Sent Events (`/progress/{task_id}`)
**Пример использования:**
```bash
curl -X POST "http://localhost:8000/parse_demo" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com"
}'
```
### 4. История запросов
**Получить историю (`GET /history`)**
Возвращает последние 10 запросов с метаданными.
**Очистить историю (`DELETE /history`)**
Удаляет всю историю запросов.
### 5. Отслеживание прогресса
**Получить статус (`GET /progress/{task_id}/status`)**
Возвращает текущий статус задачи парсинга.
**Поток событий (`GET /progress/{task_id}`)**
Server-Sent Events поток для отслеживания прогресса в реальном времени.
## 🛠️ Технологии
### Backend
- **FastAPI** 0.115+ — современный веб-фреймворк для Python
- **Python 3.9+** — язык программирования
- **Pydantic** 2.12+ — валидация данных и настройки
- **Selenium** 4.38+ — автоматизация браузера для парсинга
- **webdriver-manager** 4.0+ — автоматическое управление драйверами браузера
- **httpx** 0.27+ — асинхронный HTTP-клиент
- **python-multipart** — обработка файлов
### AI & API
- **Proxy API** — OpenAI-совместимый API для России (без VPN)
- Базовая модель: `openai/gpt-4o-mini`
- Vision модель: `openai/gpt-4o-mini` (поддержка изображений)
- DALL·E модель: `openai/dall-e-3` (готово к использованию)
### Frontend
- **Vanilla JavaScript** — без фреймворков
- **CSS3** — современные стили
- **HTML5** — семантическая разметка
### Инструменты разработки
- **uvicorn** — ASGI сервер
- **python-dotenv** — управление переменными окружения
- **aiofiles** — асинхронная работа с файлами
- **Pillow** — обработка изображений (для будущих функций)
## 📖 API Документация
После запуска сервера доступна интерактивная документация:
- **Swagger UI**: http://localhost:8000/docs
- **ReDoc**: http://localhost:8000/redoc
### Эндпоинты
| Метод | Путь | Описание |
|-------|------|----------|
| `GET` | `/` | Главная страница (веб-интерфейс) |
| `POST` | `/analyze_text` | Анализ текста конкурента |
| `POST` | `/analyze_image` | Анализ изображения конкурента |
| `POST` | `/parse_demo` | Парсинг и анализ веб-страницы |
| `GET` | `/history` | Получить историю запросов |
| `DELETE` | `/history` | Очистить историю |
| `GET` | `/health` | Проверка работоспособности |
| `GET` | `/progress/{task_id}` | Поток событий прогресса (SSE) |
| `GET` | `/progress/{task_id}/status` | Статус задачи |
Подробная документация API в файле [docs.md](docs.md)
## 🔐 Конфигурация
### Переменные окружения
Все настройки находятся в файле `.env`:
| Переменная | Описание | По умолчанию | Обязательная |
|-----------|----------|--------------|--------------|
| `PROXY_API_KEY` | Ключ Proxy API | - | ✅ Да |
| `PROXY_API_BASE_URL` | Базовый URL Proxy API | `https://openai.api.proxyapi.ru/v1` | Нет |
| `OPENAI_MODEL` | Модель для текста | `openai/gpt-4o-mini` | Нет |
| `OPENAI_VISION_MODEL` | Модель для изображений | `openai/gpt-4o-mini` | Нет |
| `DALL_E_MODEL` | Модель для генерации изображений | `openai/dall-e-3` | Нет |
| `API_HOST` | Хост API сервера | `0.0.0.0` | Нет |
| `API_PORT` | Порт API сервера | `8000` | Нет |
| `BROWSER_BINARY_PATH` | Путь к браузеру | Автоопределение | Нет |
### Получение Proxy API ключа
1. Зарегистрируйтесь на [https://proxyapi.ru/](https://proxyapi.ru/)
2. Получите API ключ в личном кабинете
3. Пополните баланс (оплата в рублях)
4. Добавьте ключ в `.env` файл
**Документация Proxy API:**
- [OpenAI-совместимый API](https://proxyapi.ru/docs/openai-compatible-api)
- [Генерация текста](https://proxyapi.ru/docs/openai-text-generation)
- [Генерация изображений](https://proxyapi.ru/docs/openai-image-generation)
## 📝 Примеры использования
### Python
```python
import requests
# Анализ текста
response = requests.post(
"http://localhost:8000/analyze_text",
json={"text": "Текст конкурента для анализа..."}
)
analysis = response.json()
print(analysis["analysis"]["strengths"])
# Анализ изображения
with open("banner.jpg", "rb") as f:
response = requests.post(
"http://localhost:8000/analyze_image",
files={"file": f}
)
image_analysis = response.json()
# Парсинг сайта
response = requests.post(
"http://localhost:8000/parse_demo",
json={"url": "https://competitor.com"}
)
task_id = response.json()["task_id"]
# Отслеживание прогресса
import time
while True:
status = requests.get(f"http://localhost:8000/progress/{task_id}/status").json()
print(f"Статус: {status['status']}, Прогресс: {status['progress']}%")
if status["status"] in ["completed", "error"]:
break
time.sleep(1)
```
### JavaScript (Frontend)
```javascript
// Анализ текста
async function analyzeText(text) {
const response = await fetch('/analyze_text', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text })
});
return await response.json();
}
// Анализ изображения
async function analyzeImage(file) {
const formData = new FormData();
formData.append('file', file);
const response = await fetch('/analyze_image', {
method: 'POST',
body: formData
});
return await response.json();
}
// Отслеживание прогресса через SSE
function trackProgress(taskId) {
const eventSource = new EventSource(`/progress/${taskId}`);
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log(`Прогресс: ${data.progress}%`);
if (data.status === 'completed') {
eventSource.close();
}
};
}
```
## 🐛 Устранение неполадок
### Ошибка 402: Недостаточно баланса Proxy API
**Решение:** Пополните баланс на [https://proxyapi.ru/](https://proxyapi.ru/) или используйте более дешевую модель.
Подробнее: [PROXY_API_BALANCE_ERROR.md](PROXY_API_BALANCE_ERROR.md)
### Браузер не найден
**Решение:**
1. Убедитесь, что Chrome/Vivaldi установлен
2. Укажите путь в `.env`: `BROWSER_BINARY_PATH=путь/к/браузеру.exe`
### Ошибка версии ChromeDriver
**Решение:** Очистите кэш и перезапустите сервер:
```powershell
Remove-Item -Recurse -Force "$env:USERPROFILE\.wdm"
Remove-Item -Recurse -Force "$env:USERPROFILE\.cache\selenium"
```
Подробнее: [INSTALL.md](INSTALL.md#проблема-несовместимость-версии-драйвера)
### Порт 8000 занят
**Решение:** Измените порт в `.env`:
```env
API_PORT=8001
```
Или завершите процесс на порту 8000.
### Импорт модулей не работает
**Решение:**
```bash
# Убедитесь, что виртуальное окружение активировано
# Переустановите зависимости
pip install -r requirements.txt --force-reinstall
```
## 🔄 Миграция с OpenAI на Proxy API
Проект был мигрирован с OpenAI API на Proxy API для работы без VPN в России.
**Что изменилось:**
- `OPENAI_API_KEY` → `PROXY_API_KEY`
- Модели теперь используют формат: `openai/gpt-4o-mini`
- Базовый URL: `https://openai.api.proxyapi.ru/v1`
Подробнее: [PROXY_API_MIGRATION.md](PROXY_API_MIGRATION.md)
## 🚧 Известные ограничения
- История хранит только последние 10 запросов
- Парсинг работает только с публично доступными сайтами
- Анализ изображений требует достаточного баланса на Proxy API
- Скриншоты сайтов больше не создаются (парсинг только HTML контента)
## 📚 Дополнительная документация
- [INSTALL.md](INSTALL.md) — подробная инструкция по установке
- [PROXY_API_MIGRATION.md](PROXY_API_MIGRATION.md) — миграция на Proxy API
- [PROXY_API_BALANCE_ERROR.md](PROXY_API_BALANCE_ERROR.md) — решение проблем с балансом
- [PARSING_IMPROVEMENTS.md](PARSING_IMPROVEMENTS.md) — улучшения парсинга
- [CHROME_MIGRATION.md](CHROME_MIGRATION.md) — миграция на Chrome
- [QUICK_START_PROXY_API.md](QUICK_START_PROXY_API.md) — быстрый старт с Proxy API
## 🤝 Вклад в проект
Приветствуются любые улучшения! Пожалуйста:
1. Форкните репозиторий
2. Создайте ветку для новой функции (`git checkout -b feature/AmazingFeature`)
3. Зафиксируйте изменения (`git commit -m 'Add some AmazingFeature'`)
4. Отправьте в ветку (`git push origin feature/AmazingFeature`)
5. Откройте Pull Request
## 📄 Лицензия
Этот проект распространяется под лицензией MIT. См. файл `LICENSE` для подробностей.
## 👨💻 Авторы
- Разработка и поддержка проекта
## 🙏 Благодарности
- [FastAPI](https://fastapi.tiangolo.com/) — за отличный фреймворк
- [Proxy API](https://proxyapi.ru/) — за доступ к OpenAI без VPN
- [Selenium](https://www.selenium.dev/) — за инструменты автоматизации браузера
- [OpenAI](https://openai.com/) — за мощные AI модели
## 📞 Поддержка
Если у вас возникли вопросы или проблемы:
1. Проверьте [INSTALL.md](INSTALL.md) для решения распространенных проблем
2. Изучите раздел [Устранение неполадок](#-устранение-неполадок)
3. Откройте Issue в репозитории
---
**Версия:** 1.0.0
**Последнее обновление:** 2025