mirror of
				https://gitlab.com/foxixus/neomovies-api.git
				synced 2025-10-28 18:08:51 +05:00 
			
		
		
		
	- Fix NewSearchHandler call in api/index.go to include kpService
- Update README with Kinopoisk API integration details
- Document new player API format: /players/{player}/{id_type}/{id}
- Add all new environment variables (KPAPI_KEY, HDVB_TOKEN, etc)
- Add examples for both kp and imdb ID types
		
	
		
			
				
	
	
		
			316 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			316 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Neo Movies API
 | ||
| 
 | ||
| REST API для поиска и получения информации о фильмах, использующий TMDB API.
 | ||
| 
 | ||
| ## Особенности
 | ||
| 
 | ||
| - Интеграция с Kinopoisk API для русского контента
 | ||
| - Автоматическое переключение между TMDB и Kinopoisk
 | ||
| - Поиск фильмов и сериалов
 | ||
| - Информация о фильмах
 | ||
| - Популярные, топ-рейтинговые, предстоящие фильмы
 | ||
| - Поддержка русских плееров (Alloha, Lumex, Vibix, HDVB)
 | ||
| - Swagger документация
 | ||
| - Полная поддержка русского языка
 | ||
| 
 | ||
| ## 🛠 Быстрый старт
 | ||
| 
 | ||
| ### Локальная разработка
 | ||
| 
 | ||
| 1. **Клонирование репозитория**
 | ||
| ```bash
 | ||
| git clone https://gitlab.com/foxixus/neomovies-api.git
 | ||
| cd neomovies-api
 | ||
| ```
 | ||
| 
 | ||
| 2. **Создание .env файла**
 | ||
| ```bash
 | ||
| cp .env.example .env
 | ||
| # Заполните необходимые переменные
 | ||
| ```
 | ||
| 
 | ||
| 3. **Установка зависимостей**
 | ||
| ```bash
 | ||
| go mod download
 | ||
| ```
 | ||
| 
 | ||
| 4. **Запуск**
 | ||
| ```bash
 | ||
| go run main.go
 | ||
| ```
 | ||
| 
 | ||
| API будет доступен на `http://localhost:3000`
 | ||
| 
 | ||
| ### Деплой на Vercel
 | ||
| 
 | ||
| 1. **Подключите репозиторий к Vercel**
 | ||
| 2. **Настройте переменные окружения** (см. список ниже)
 | ||
| 3. **Деплой произойдет автоматически**
 | ||
| 
 | ||
| ## ⚙️ Переменные окружения
 | ||
| 
 | ||
| ```bash
 | ||
| # Обязательные
 | ||
| MONGO_URI=mongodb://localhost:27017/neomovies
 | ||
| MONGO_DB_NAME=neomovies
 | ||
| TMDB_ACCESS_TOKEN=your_tmdb_access_token
 | ||
| JWT_SECRET=your_jwt_secret_key
 | ||
| 
 | ||
| # Kinopoisk API
 | ||
| KPAPI_KEY=920aaf6a-9f64-46f7-bda7-209fb1069440
 | ||
| KPAPI_BASE_URL=https://kinopoiskapiunofficial.tech/api
 | ||
| 
 | ||
| # Сервис
 | ||
| PORT=3000
 | ||
| BASE_URL=http://localhost:3000
 | ||
| FRONTEND_URL=http://localhost:3001
 | ||
| NODE_ENV=development
 | ||
| 
 | ||
| # Email (Gmail)
 | ||
| GMAIL_USER=your_gmail@gmail.com
 | ||
| GMAIL_APP_PASSWORD=your_gmail_app_password
 | ||
| 
 | ||
| # Русские плееры
 | ||
| LUMEX_URL=https://p.lumex.space
 | ||
| ALLOHA_TOKEN=your_alloha_token
 | ||
| VIBIX_HOST=https://vibix.org
 | ||
| VIBIX_TOKEN=18745|NzecUXT4gikPUtFkSEFlDLPmr9kWnQACTo1N0Ixq9240bcf1
 | ||
| HDVB_TOKEN=b9ae5f8c4832244060916af4aa9d1939
 | ||
| 
 | ||
| # Торренты (RedAPI)
 | ||
| REDAPI_BASE_URL=http://redapi.cfhttp.top
 | ||
| REDAPI_KEY=your_redapi_key
 | ||
| 
 | ||
| # Google OAuth
 | ||
| GOOGLE_CLIENT_ID=your_google_client_id
 | ||
| GOOGLE_CLIENT_SECRET=your_google_client_secret
 | ||
| GOOGLE_REDIRECT_URL=http://localhost:3000/api/v1/auth/google/callback
 | ||
| ```
 | ||
| 
 | ||
| ## 📋 API Endpoints
 | ||
| 
 | ||
| ### 🔓 Публичные маршруты
 | ||
| 
 | ||
| ```http
 | ||
| # Система
 | ||
| GET  /api/v1/health                          # Проверка состояния
 | ||
| 
 | ||
| # Аутентификация
 | ||
| POST /api/v1/auth/register                   # Регистрация (отправка кода)
 | ||
| POST /api/v1/auth/verify                     # Подтверждение email кодом
 | ||
| POST /api/v1/auth/resend-code               # Повторная отправка кода
 | ||
| POST /api/v1/auth/login                      # Авторизация
 | ||
| GET  /api/v1/auth/google/login               # Начало авторизации через Google (redirect)
 | ||
| GET  /api/v1/auth/google/callback            # Коллбек Google OAuth (возвращает JWT)
 | ||
| 
 | ||
| # Поиск и категории
 | ||
| GET  /search/multi                           # Мультипоиск
 | ||
| GET  /api/v1/categories                      # Список категорий
 | ||
| GET  /api/v1/categories/{id}/movies          # Фильмы по категории
 | ||
| 
 | ||
| # Фильмы
 | ||
| GET  /api/v1/movies/search                   # Поиск фильмов
 | ||
| GET  /api/v1/movies/popular                  # Популярные
 | ||
| GET  /api/v1/movies/top-rated                # Топ-рейтинговые
 | ||
| GET  /api/v1/movies/upcoming                 # Предстоящие
 | ||
| GET  /api/v1/movies/now-playing              # В прокате
 | ||
| GET  /api/v1/movies/{id}                     # Детали фильма
 | ||
| GET  /api/v1/movies/{id}/recommendations     # Рекомендации
 | ||
| GET  /api/v1/movies/{id}/similar             # Похожие
 | ||
| 
 | ||
| # Сериалы
 | ||
| GET  /api/v1/tv/search                       # Поиск сериалов
 | ||
| GET  /api/v1/tv/popular                      # Популярные
 | ||
| GET  /api/v1/tv/top-rated                    # Топ-рейтинговые
 | ||
| GET  /api/v1/tv/on-the-air                   # В эфире
 | ||
| GET  /api/v1/tv/airing-today                 # Сегодня в эфире
 | ||
| GET  /api/v1/tv/{id}                         # Детали сериала
 | ||
| GET  /api/v1/tv/{id}/recommendations         # Рекомендации
 | ||
| GET  /api/v1/tv/{id}/similar                 # Похожие
 | ||
| 
 | ||
| # Плееры (новый формат с типом ID)
 | ||
| GET  /api/v1/players/alloha/{id_type}/{id}    # Alloha плеер (kp/301 или imdb/tt0133093)
 | ||
| GET  /api/v1/players/lumex/{id_type}/{id}     # Lumex плеер (kp/301 или imdb/tt0133093)
 | ||
| GET  /api/v1/players/vibix/{id_type}/{id}     # Vibix плеер (kp/301 или imdb/tt0133093)
 | ||
| GET  /api/v1/players/hdvb/{id_type}/{id}      # HDVB плеер (kp/301 или imdb/tt0133093)
 | ||
| GET  /api/v1/players/vidsrc/{media_type}/{imdb_id}  # Vidsrc (только IMDB)
 | ||
| GET  /api/v1/players/vidlink/movie/{imdb_id}       # Vidlink фильмы (только IMDB)
 | ||
| GET  /api/v1/players/vidlink/tv/{tmdb_id}          # Vidlink сериалы (только TMDB)
 | ||
| 
 | ||
| # Торренты
 | ||
| GET  /api/v1/torrents/search/{imdbId}        # Поиск торрентов
 | ||
| 
 | ||
| # Реакции (публичные)
 | ||
| GET  /api/v1/reactions/{mediaType}/{mediaId}/counts    # Счетчики реакций
 | ||
| 
 | ||
| # Изображения
 | ||
| GET  /api/v1/images/{size}/{path}            # Прокси TMDB изображений
 | ||
| ```
 | ||
| 
 | ||
| ### 🔒 Приватные маршруты (требуют JWT)
 | ||
| 
 | ||
| ```http
 | ||
| # Профиль
 | ||
| GET  /api/v1/auth/profile                    # Профиль пользователя
 | ||
| PUT  /api/v1/auth/profile                    # Обновление профиля
 | ||
| 
 | ||
| # Избранное
 | ||
| GET  /api/v1/favorites                       # Список избранного
 | ||
| POST /api/v1/favorites/{id}                  # Добавить в избранное
 | ||
| DELETE /api/v1/favorites/{id}                # Удалить из избранного
 | ||
| 
 | ||
| # Реакции (приватные)
 | ||
| GET  /api/v1/reactions/{mediaType}/{mediaId}/my-reaction # Моя реакция
 | ||
| POST /api/v1/reactions/{mediaType}/{mediaId}           # Установить реакцию
 | ||
| DELETE /api/v1/reactions/{mediaType}/{mediaId}         # Удалить реакцию
 | ||
| GET  /api/v1/reactions/my                              # Все мои реакции
 | ||
| ```
 | ||
| 
 | ||
| ## 📖 Примеры использования
 | ||
| 
 | ||
| ### Регистрация и верификация
 | ||
| 
 | ||
| ```bash
 | ||
| # 1. Регистрация
 | ||
| curl -X POST https://api.neomovies.ru/api/v1/auth/register \
 | ||
|   -H "Content-Type: application/json" \
 | ||
|   -d '{
 | ||
|     "email": "user@example.com",
 | ||
|     "password": "password123",
 | ||
|     "name": "John Doe"
 | ||
|   }'
 | ||
| 
 | ||
| # Ответ: {"success": true, "message": "Registered. Check email for verification code."}
 | ||
| 
 | ||
| # 2. Подтверждение email (код из письма)
 | ||
| curl -X POST https://api.neomovies.ru/api/v1/auth/verify \
 | ||
|   -H "Content-Type: application/json" \
 | ||
|   -d '{
 | ||
|     "email": "user@example.com",
 | ||
|     "code": "123456"
 | ||
|   }'
 | ||
| 
 | ||
| # 3. Авторизация
 | ||
| curl -X POST https://api.neomovies.ru/api/v1/auth/login \
 | ||
|   -H "Content-Type: application/json" \
 | ||
|   -d '{
 | ||
|     "email": "user@example.com",
 | ||
|     "password": "password123"
 | ||
|   }'
 | ||
| ```
 | ||
| 
 | ||
| ### Поиск фильмов
 | ||
| 
 | ||
| ```bash
 | ||
| # Поиск фильмов
 | ||
| curl "https://api.neomovies.ru/api/v1/movies/search?query=marvel&page=1"
 | ||
| 
 | ||
| # Детали фильма
 | ||
| curl "https://api.neomovies.ru/api/v1/movies/550"
 | ||
| 
 | ||
| # Добавить в избранное (с JWT токеном)
 | ||
| curl -X POST https://api.neomovies.ru/api/v1/favorites/550 \
 | ||
|   -H "Authorization: Bearer YOUR_JWT_TOKEN"
 | ||
| ```
 | ||
| 
 | ||
| ### Поиск торрентов
 | ||
| 
 | ||
| ```bash
 | ||
| # Поиск торрентов для фильма "Побег из Шоушенка"
 | ||
| curl "https://api.neomovies.ru/api/v1/torrents/search/tt0111161?type=movie&quality=1080p"
 | ||
| ```
 | ||
| 
 | ||
| ## 🎨 Документация API
 | ||
| 
 | ||
| Интерактивная документация доступна по адресу:
 | ||
| 
 | ||
| **🔗 https://api.neomovies.ru/**
 | ||
| 
 | ||
| ## ☁️ Деплой на Vercel
 | ||
| 
 | ||
| 1. **Подключите репозиторий к Vercel**
 | ||
| 2. **Настройте Environment Variables в Vercel Dashboard:**
 | ||
| 3. **Деплой автоматически запустится!**
 | ||
| 
 | ||
| ## 🏗 Архитектура
 | ||
| 
 | ||
| ```
 | ||
| ├── main.go                 # Точка входа приложения
 | ||
| ├── api/
 | ||
| │   └── index.go           # Vercel serverless handler
 | ||
| ├── pkg/                   # Публичные пакеты (совместимо с Vercel)
 | ||
| │   ├── config/           # Конфигурация с поддержкой альтернативных env vars
 | ||
| │   ├── database/         # Подключение к MongoDB
 | ||
| │   ├── middleware/       # JWT, CORS, логирование
 | ||
| │   ├── models/          # Структуры данных
 | ||
| │   ├── services/        # Бизнес-логика
 | ||
| │   └── handlers/        # HTTP обработчики
 | ||
| ├── vercel.json          # Конфигурация Vercel
 | ||
| └── go.mod              # Go модули
 | ||
| ```
 | ||
| 
 | ||
| ## 🔧 Технологии
 | ||
| 
 | ||
| - **Go 1.21** - основной язык
 | ||
| - **Gorilla Mux** - HTTP роутер
 | ||
| - **MongoDB** - база данных
 | ||
| - **JWT** - аутентификация
 | ||
| - **TMDB API** - данные о фильмах (международный контент)
 | ||
| - **Kinopoisk API Unofficial** - данные о русском контенте
 | ||
| - **Gmail SMTP** - email уведомления
 | ||
| - **Vercel** - деплой и хостинг
 | ||
| 
 | ||
| ## 🌍 Kinopoisk API интеграция
 | ||
| 
 | ||
| API автоматически переключается между TMDB и Kinopoisk в зависимости от языка запроса:
 | ||
| 
 | ||
| - **Русский язык (`lang=ru`)** → Kinopoisk API
 | ||
|   - Русские названия фильмов
 | ||
|   - Рейтинги Кинопоиска
 | ||
|   - Поддержка Kinopoisk ID
 | ||
|   
 | ||
| - **Английский язык (`lang=en`)** → TMDB API
 | ||
|   - Международные названия
 | ||
|   - Рейтинги IMDB/TMDB
 | ||
|   - Поддержка IMDB/TMDB ID
 | ||
| 
 | ||
| ### Формат ID в плеерах
 | ||
| 
 | ||
| Все русские плееры поддерживают два типа идентификаторов:
 | ||
| 
 | ||
| ```bash
 | ||
| # По Kinopoisk ID (приоритет для русского контента)
 | ||
| GET /api/v1/players/alloha/kp/301
 | ||
| 
 | ||
| # По IMDB ID (fallback)
 | ||
| GET /api/v1/players/alloha/imdb/tt0133093
 | ||
| 
 | ||
| # Примеры для других плееров
 | ||
| GET /api/v1/players/lumex/kp/301
 | ||
| GET /api/v1/players/vibix/kp/301
 | ||
| GET /api/v1/players/hdvb/kp/301
 | ||
| ```
 | ||
| 
 | ||
| ## 🚀 Производительность
 | ||
| 
 | ||
| По сравнению с Node.js версией:
 | ||
| - **3x быстрее** обработка запросов
 | ||
| - **50% меньше** потребление памяти
 | ||
| - **Конкурентность** благодаря горутинам
 | ||
| - **Типобезопасность** предотвращает ошибки
 | ||
| 
 | ||
| ## 🤝 Contribution
 | ||
| 
 | ||
| 1. Форкните репозиторий
 | ||
| 2. Создайте feature-ветку (`git checkout -b feature/amazing-feature`)
 | ||
| 3. Коммитьте изменения (`git commit -m 'Add amazing feature'`)
 | ||
| 4. Пушните в ветку (`git push origin feature/amazing-feature`)
 | ||
| 5. Откройте Pull Request
 | ||
| 
 | ||
| ## 📄 Лицензия
 | ||
| 
 | ||
| Apache License 2.0 - подробности в файле [LICENSE](LICENSE)
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| Made with <3 by Foxix |