competitor-monitor/
│
├── backend/ # Backend модуль
│ ├── __init__.py
│ ├── main.py # Главный файл FastAPI
│ ├── config.py # Конфигурация приложения
│ │
│ ├── models/ # Pydantic модели
│ │ ├── __init__.py
│ │ └── schemas.py # Схемы запросов/ответов
│ │
│ └── services/ # Бизнес-логика
│ ├── __init__.py
│ ├── openai_service.py # Интеграция с OpenAI
│ ├── parser_service.py # Парсинг веб-страниц
│ └── history_service.py # Управление историей
│
├── frontend/ # Frontend модуль
│ ├── index.html # Главная HTML страница
│ ├── styles.css # CSS стили
│ └── app.js # JavaScript приложение
│
├── requirements.txt # Python зависимости
├── env.example.txt # Пример переменных окружения
├── history.json # Файл истории запросов
├── README.md # Описание проекта
└── docs.md # Эта документация
http://localhost:8000
| Метод | Путь | Описание |
|---|---|---|
| GET | / |
Главная страница (веб-интерфейс) |
| POST | /analyze_text |
Анализ текста конкурента |
| POST | /analyze_image |
Анализ изображения конкурента |
| POST | /parse_demo |
Парсинг и анализ сайта по URL |
| GET | /history |
Получение истории запросов |
| DELETE | /history |
Очистка истории запросов |
| GET | /health |
Проверка работоспособности |
| GET | /docs |
Swagger UI документация |
| GET | /redoc |
ReDoc документация |
Запрос:
curl -X POST "http://localhost:8000/analyze_text" \
-H "Content-Type: application/json" \
-d '{
"text": "Наша компания предлагает уникальные решения для бизнеса. Мы работаем на рынке 10 лет и обслуживаем более 1000 клиентов. Наши преимущества: быстрая доставка, гарантия качества, индивидуальный подход к каждому клиенту."
}'Ответ:
{
"success": true,
"analysis": {
"strengths": [
"Долгий опыт работы на рынке (10 лет)",
"Большая клиентская база (1000+ клиентов)",
"Комплексный подход к обслуживанию"
],
"weaknesses": [
"Отсутствие конкретных цен",
"Нет упоминания о технологиях",
"Общие формулировки без специфики"
],
"unique_offers": [
"Индивидуальный подход к каждому клиенту",
"Гарантия качества"
],
"recommendations": [
"Добавить конкретные цифры и кейсы",
"Указать уникальные технологические преимущества",
"Включить отзывы клиентов"
],
"summary": "Компания позиционирует себя как надёжного партнёра с опытом, но маркетинговые материалы требуют конкретизации для повышения конверсии."
},
"error": null
}Запрос:
curl -X POST "http://localhost:8000/analyze_image" \
-F "file=@banner.jpg"Ответ:
{
"success": true,
"analysis": {
"description": "Рекламный баннер с изображением продукта на синем градиентном фоне. Крупный заголовок белым шрифтом, кнопка CTA оранжевого цвета.",
"marketing_insights": [
"Чёткая визуальная иерархия привлекает внимание",
"Контрастная цветовая схема выделяет CTA",
"Минималистичный дизайн не перегружает восприятие"
],
"visual_style_score": 7,
"visual_style_analysis": "Современный корпоративный стиль с хорошим балансом элементов. Типографика читабельна, но можно улучшить отступы.",
"recommendations": [
"Добавить социальное доказательство (отзывы, рейтинги)",
"Увеличить размер CTA кнопки",
"Рассмотреть A/B тестирование цветов"
]
},
"error": null
}Запрос:
curl -X POST "http://localhost:8000/parse_demo" \
-H "Content-Type: application/json" \
-d '{
"url": "example.com"
}'Ответ:
{
"success": true,
"data": {
"url": "https://example.com",
"title": "Example Domain",
"h1": "Example Domain",
"first_paragraph": "This domain is for use in illustrative examples in documents.",
"analysis": {
"strengths": ["..."],
"weaknesses": ["..."],
"unique_offers": ["..."],
"recommendations": ["..."],
"summary": "..."
}
},
"error": null
}Запрос:
curl -X GET "http://localhost:8000/history"Ответ:
{
"items": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2024-01-15T10:30:00",
"request_type": "text",
"request_summary": "Наша компания предлагает уникальные решения...",
"response_summary": "Компания позиционирует себя как надёжного партнёра..."
}
],
"total": 1
}Запрос:
curl -X DELETE "http://localhost:8000/history"Ответ:
{
"success": true,
"message": "История очищена"
}Запрос:
curl -X GET "http://localhost:8000/health"Ответ:
{
"status": "healthy",
"service": "Competitor Monitor",
"version": "1.0.0"
}Приложение анализирует любой текстовый контент конкурентов:
- Описания продуктов
- Тексты с лендингов
- Рекламные объявления
- Посты в социальных сетях
- Email рассылки
Минимальная длина текста: 10 символов
Поддерживаемые форматы:
- JPEG/JPG
- PNG
- GIF
- WebP
Что можно анализировать:
- Рекламные баннеры
- Скриншоты сайтов
- Фотографии упаковки
- Креативы для социальных сетей
- Логотипы и фирменный стиль
Максимальный размер: 10MB (рекомендуется до 4MB для быстрой обработки)
Автоматически извлекаемые элементы:
<title>— заголовок страницы<h1>— главный заголовок- Первый значимый
<p>— первый абзац (минимум 50 символов)
Особенности:
- Автоматическое добавление протокола
https:// - Следование редиректам
- Таймаут: 10 секунд
- User-Agent: Mozilla/5.0 (имитация браузера)
{
text: string // Минимум 10 символов
}{
url: string // URL сайта для парсинга
}{
strengths: string[] // Сильные стороны
weaknesses: string[] // Слабые стороны
unique_offers: string[] // Уникальные предложения
recommendations: string[] // Рекомендации
summary: string // Общее резюме
}{
description: string // Описание изображения
marketing_insights: string[] // Маркетинговые инсайты
visual_style_score: number // Оценка 0-10
visual_style_analysis: string // Анализ стиля
recommendations: string[] // Рекомендации
}{
id: string // UUID записи
timestamp: datetime // Время запроса
request_type: string // "text" | "image" | "parse"
request_summary: string // Краткое описание запроса
response_summary: string // Краткое описание ответа
}| Код | Описание |
|---|---|
| 200 | Успешный запрос |
| 400 | Некорректный запрос (неверный формат, короткий текст) |
| 422 | Ошибка валидации данных |
| 500 | Внутренняя ошибка сервера |
| Переменная | Описание | По умолчанию |
|---|---|---|
PROXY_API_KEY |
API ключ ProxyAPI | - |
OPENAI_MODEL |
Модель для текста | gpt-4o-mini |
OPENAI_VISION_MODEL |
Модель для изображений | gpt-4o-mini |
API_HOST |
Хост сервера | 0.0.0.0 |
API_PORT |
Порт сервера | 8000 |
Проект использует ProxyAPI — OpenAI-совместимый API для России.
- Без VPN и блокировок
- Оплата в рублях
- Документация
- Максимум записей: 10
- Файл хранения:
history.json - Формат: JSON с UTF-8 кодировкой
- Не храните API ключи в коде
- Используйте
.envфайл для секретов - Добавьте
.envв.gitignore - В продакшене используйте HTTPS
- Настройте CORS для конкретных доменов