yandex-maps-reviews-parser
Описание
Языки
- PHP64,7%
- Vue14,6%
- JavaScript10,6%
- CSS9%
- Dockerfile0,8%
- HTML0,3%
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
README.md
Yandex Maps Reviews Parser
Web-приложение для парсинга и отображения отзывов с Яндекс Карт. Позволяет загружать отзывы из разных организаций и просматривать их в удобном интерфейсе.
🌟 Возможности
- Парсинг отзывов с Яндекс Карт по URL организации
- Извлечение информации: название организации, рейтинг, количество отзывов, текст отзывов
- Мульти-организации: поддержка нескольких организаций одновременно
- Кэширование: данные кэшируются на 1 час для оптимизации
- Адаптивный дизайн: удобный интерфейс с боковой панелью
- Авторизация: система регистрации и входа пользователей
🛠 Технологии
Backend
- PHP 8.2+
- Laravel 11 - фреймворк
- MySQL 8.0 - база данных
- Guzzle HTTP - HTTP клиент для парсинга
Frontend
- Vue 3 - JavaScript фреймворк
- Vite - сборщик
- CSS - кастомные стили
DevOps
- Docker & Docker Compose - контейнеризация
- Nginx - веб-сервер
📋 Требования
- Docker 20.10+
- Docker Compose 2.0+
- Git
🚀 Установка и запуск
1. Клонирование репозитория
2. Настройка окружения
Скопируйте файлы примеров окружения:
3. Запуск через Docker Compose
4. Инициализация базы данных
В tinker выполните:
5. Доступ к приложению
- Frontend: http://localhost:5173
- Backend API: http://localhost:8080
- MySQL: localhost:3307
📖 Использование
Регистрация и вход
- Откройте http://localhost:5173
- Нажмите "Нет аккаунта? Зарегистрироваться"
- Заполните форму регистрации
- Войдите в систему
Добавление организации
- Перейдите в раздел "Настройка"
- Вставьте ссылку на Яндекс Карты в формате:
https://yandex.ru/maps/org/название_организации/ID_организации/reviews/
- Нажмите "Сохранить"
Просмотр отзывов
- Перейдите в раздел "Отзывы"
- Отзывы будут загружены автоматически
- Каждая карточка показывает:
- Название организации
- Дату отзыва
- Рейтинг (звёзды)
- Имя пользователя
- Текст отзыва
📁 Структура проекта
.
├── backend/ # Laravel Backend
│ ├── app/
│ │ ├── Http/Controllers/Api/
│ │ │ ├── AuthController.php # Авторизация
│ │ │ └── YandexController.php # Парсинг отзывов
│ │ └── Models/
│ │ ├── User.php # Пользователь
│ │ ├── Organization.php # Организация
│ │ └── Review.php # Отзыв
│ ├── database/migrations/ # Миграции БД
│ ├── routes/api.php # API маршруты
│ └── .env.example # Пример окружения
├── frontend/ # Vue Frontend
│ ├── src/
│ │ ├── components/
│ │ │ ├── AppSidebar.vue # Боковая панель
│ │ │ ├── AuthModal.vue # Модалка авторизации
│ │ │ ├── PageHeader.vue # Заголовок страницы
│ │ │ ├── ReviewsView.vue # Отображение отзывов
│ │ │ └── YandexSettings.vue # Настройки URL
│ │ ├── composables/
│ │ │ └── useAuth.js # Composable авторизации
│ │ └── App.vue # Главный компонент
│ └── .env.example # Пример окружения
├── docker/ # Docker конфиги
│ └── nginx/
│ └── default.conf # Nginx конфиг
├── docker-compose.yml # Docker Compose конфиг
└── README.md # Этот файл
🔧 API Эндпоинты
Авторизация
- Регистрация пользователяPOST /api/register- Вход в системуPOST /api/login- Выход из системы (требует авторизации)POST /api/logout- Получение данных пользователя (требует авторизации)GET /api/user
Отзывы
- Парсинг отзывов (требует авторизации)POST /api/yandex/parse-reviews- Body: { "url": "https://yandex.ru/maps/org/..." }
- Response: { "orgId": "...", "name": "...", "summary": {...}, "reviews": [...] }
- Body:
🗄️ База данных
Таблицы
users
users
- ID пользователяid- Имяname- email
- Хеш пароляpassword- API токенapi_token,created_at- Временные меткиupdated_at
organizations
organizations
- ID записиid- ID организации в Яндексyandex_id- URL организацииurl- Название организацииname- Телефон организацииphone- Рейтингrating- Количество отзывовreview_count- Время последнего парсингаlast_parsed_at,created_at- Временные меткиupdated_at
reviews
reviews
- ID записиid- ID организацииorg_id- Название организацииorg_name- URL организацииurl- Имя автора отзываuser_name- Рейтинг отзываrating- Текст отзываtext- Дата публикацииdate_published- ID отзыва в Яндексexternal_review_id,created_at- Временные меткиupdated_at
🔐 Безопасность
- Пароли хешируются с использованием bcrypt
- API токены генерируются случайно (80 символов)
- Авторизация через Bearer токен
- Валидация всех входных данных
🐛 Устранение проблем
Проблема: Не запускаются контейнеры
Проблема: Ошибка подключения к БД
Проблема: Не работают миграции
Проблема: Не парсятся отзывы
- Проверьте правильность URL организации
- Убедитесь, что страница отзывов доступна
- Проверьте логи Laravel:
🌍 Развертывание на Ubuntu VPS
Предварительные требования
- Ubuntu 20.04+ / 22.04+
- Минимум 2GB RAM
- 20GB свободного места на диске
- Root или sudo доступ
Шаг 1: Подключение к серверу
Шаг 2: Обновление системы
Шаг 3: Установка Docker
Шаг 4: Настройка Firewall (опционально)
Шаг 5: Создание пользователя для проекта (рекомендуется)
Шаг 6: Клонирование репозитория
Шаг 7: Настройка окружения
Измените следующие параметры:
Редактирование :frontend/.env
Шаг 8: Запуск контейнеров
Шаг 9: Инициализация базы данных
Шаг 10: Настройка Nginx как обратного прокси
Добавьте следующую конфигурацию:
Активация конфигурации:
Шаг 11: Настройка SSL с Let's Encrypt (рекомендуется)
Добавьте строку для автообновления:
0 0 * * * certbot renew --quiet
Шаг 12: Сборка Frontend для продакшена (опционально)
Для продакшена рекомендуется собирать frontend вместо использования dev-сервера:
Измените location :/
Перезапустите Nginx:
Шаг 13: Настройка автоматического запуска
Добавьте:
Активация сервиса:
Шаг 14: Настройка бэкапов (рекомендуется)
Добавьте:
Сделайте скрипт исполняемым:
Добавьте в cron для ежедневного бэкапа:
Добавьте:
0 2 * * * /usr/local/bin/backup-yandex-reviews.sh
Шаг 15: Мониторинг логов
Полезные команды
Безопасность
- Измените пароль MySQL в backend/.env
- Используйте сильные пароли для всех сервисов
- Настройте firewall для ограничения доступа
- Регулярно обновляйте систему: apt update && apt upgrade -y
- Мониторьте логи на предмет подозрительной активности
- Используйте SSH ключи вместо паролей для входа
Troubleshooting на VPS
Контейнеры не запускаются:
Проблемы с правами доступа:
Nginx не работает:
Проблемы с SSL:
📝 Лицензия
MIT License
👨💻 Автор
jkassel
- Telegram: @jkassel
🤝 Вклад
Если вы хотите внести вклад в проект:
- Сделайте fork репозитория
- Создайте ветку для вашей функции (
)git checkout -b feature/AmazingFeature - Закоммитьте изменения (
)git commit -m 'Add some AmazingFeature' - Запушьте в ветку (
)git push origin feature/AmazingFeature - Откройте Pull Request