mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-10-28 01:48: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 |