An open API service indexing awesome lists of open source software.

https://github.com/edwards359/pem08


https://github.com/edwards359/pem08

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

          

# 🔍 Мониторинг конкурентов - AI Ассистент

[![Python](https://img.shields.io/badge/Python-3.9+-blue.svg)](https://www.python.org/)
[![FastAPI](https://img.shields.io/badge/FastAPI-0.115+-green.svg)](https://fastapi.tiangolo.com/)
[![Proxy API](https://img.shields.io/badge/Proxy%20API-OpenAI--compatible-purple.svg)](https://proxyapi.ru/)
[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](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