yandex-maps-reviews-parser

0

Описание

Языки

  • PHP64,7%
  • Vue14,6%
  • JavaScript10,6%
  • CSS9%
  • Dockerfile0,8%
  • HTML0,3%
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. Доступ к приложению

📖 Использование

Регистрация и вход

  1. Откройте http://localhost:5173
  2. Нажмите "Нет аккаунта? Зарегистрироваться"
  3. Заполните форму регистрации
  4. Войдите в систему

Добавление организации

  1. Перейдите в раздел "Настройка"
  2. Вставьте ссылку на Яндекс Карты в формате:
    https://yandex.ru/maps/org/название_организации/ID_организации/reviews/
  3. Нажмите "Сохранить"

Просмотр отзывов

  1. Перейдите в раздел "Отзывы"
  2. Отзывы будут загружены автоматически
  3. Каждая карточка показывает:
    • Название организации
    • Дату отзыва
    • Рейтинг (звёзды)
    • Имя пользователя
    • Текст отзыва

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

. ├── 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": [...] }

🗄️ База данных

Таблицы

users

  • id
    - ID пользователя
  • name
    - Имя
  • email
    - Email
  • password
    - Хеш пароля
  • api_token
    - API токен
  • created_at
    ,
    updated_at
    - Временные метки

organizations

  • id
    - ID записи
  • yandex_id
    - ID организации в Яндекс
  • url
    - URL организации
  • name
    - Название организации
  • phone
    - Телефон организации
  • rating
    - Рейтинг
  • review_count
    - Количество отзывов
  • last_parsed_at
    - Время последнего парсинга
  • created_at
    ,
    updated_at
    - Временные метки

reviews

  • id
    - ID записи
  • org_id
    - ID организации
  • org_name
    - Название организации
  • url
    - URL организации
  • user_name
    - Имя автора отзыва
  • rating
    - Рейтинг отзыва
  • text
    - Текст отзыва
  • date_published
    - Дата публикации
  • external_review_id
    - ID отзыва в Яндекс
  • created_at
    ,
    updated_at
    - Временные метки

🔐 Безопасность

  • Пароли хешируются с использованием bcrypt
  • API токены генерируются случайно (80 символов)
  • Авторизация через Bearer токен
  • Валидация всех входных данных

🐛 Устранение проблем

Проблема: Не запускаются контейнеры

Проблема: Ошибка подключения к БД

Проблема: Не работают миграции

Проблема: Не парсятся отзывы

  1. Проверьте правильность URL организации
  2. Убедитесь, что страница отзывов доступна
  3. Проверьте логи 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: Мониторинг логов

Полезные команды

Безопасность

  1. Измените пароль MySQL в
    backend/.env
  2. Используйте сильные пароли для всех сервисов
  3. Настройте firewall для ограничения доступа
  4. Регулярно обновляйте систему:
    apt update && apt upgrade -y
  5. Мониторьте логи на предмет подозрительной активности
  6. Используйте SSH ключи вместо паролей для входа

Troubleshooting на VPS

Контейнеры не запускаются:

Проблемы с правами доступа:

Nginx не работает:

Проблемы с SSL:

📝 Лицензия

MIT License

👨‍💻 Автор

jkassel

🤝 Вклад

Если вы хотите внести вклад в проект:

  1. Сделайте fork репозитория
  2. Создайте ветку для вашей функции (
    git checkout -b feature/AmazingFeature
    )
  3. Закоммитьте изменения (
    git commit -m 'Add some AmazingFeature'
    )
  4. Запушьте в ветку (
    git push origin feature/AmazingFeature
    )
  5. Откройте Pull Request