mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-12-16 12:36:10 +05:00
Ed docs
This commit is contained in:
23
README.md
23
README.md
@@ -2,19 +2,6 @@
|
|||||||
|
|
||||||
Полнофункциональный REST API для поиска и получения информации о фильмах и сериалах с интеграцией Kinopoisk и TMDB.
|
Полнофункциональный REST API для поиска и получения информации о фильмах и сериалах с интеграцией Kinopoisk и TMDB.
|
||||||
|
|
||||||
## Особенности
|
|
||||||
|
|
||||||
- **Двойная интеграция**: Kinopoisk API для русского контента + TMDB для международного
|
|
||||||
- **Умное переключение**: автоматический выбор источника по языку запроса
|
|
||||||
- **Коллекции Kinopoisk**: популярные, топ-рейтинговые фильмы/сериалы из официальных коллекций
|
|
||||||
- **Унифицированный формат**: единый ответ для контента из разных источников
|
|
||||||
- **Русские плееры**: Alloha, Lumex, Vibix, HDVB, Vidsrc, Vidlink
|
|
||||||
- **Поиск торрентов**: интеграция с RedAPI для поиска торрентов
|
|
||||||
- **Система реакций**: лайки, дизлайки, избранное с сохранением в БД
|
|
||||||
- **Аутентификация**: JWT + Google OAuth
|
|
||||||
- **Интерактивная документация**: Swagger/OpenAPI
|
|
||||||
- **Высокая производительность**: Go + горутины + кэширование
|
|
||||||
|
|
||||||
## 🛠 Быстрый старт
|
## 🛠 Быстрый старт
|
||||||
|
|
||||||
### Локальная разработка
|
### Локальная разработка
|
||||||
@@ -42,12 +29,6 @@ go run main.go
|
|||||||
|
|
||||||
API будет доступен на `http://localhost:3000`
|
API будет доступен на `http://localhost:3000`
|
||||||
|
|
||||||
### Деплой на Vercel
|
|
||||||
|
|
||||||
1. **Подключите репозиторий к Vercel**
|
|
||||||
2. **Настройте переменные окружения** (см. список ниже)
|
|
||||||
3. **Деплой произойдет автоматически**
|
|
||||||
|
|
||||||
## ⚙️ Переменные окружения
|
## ⚙️ Переменные окружения
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -113,8 +94,6 @@ GET /api/v1/categories/{id}/movies # Фильмы по категор
|
|||||||
GET /api/v1/movies/search # Поиск фильмов
|
GET /api/v1/movies/search # Поиск фильмов
|
||||||
GET /api/v1/movies/popular # Популярные
|
GET /api/v1/movies/popular # Популярные
|
||||||
GET /api/v1/movies/top-rated # Топ-рейтинговые
|
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} # Детали фильма (устар.)
|
||||||
GET /api/v1/movies/{id}/recommendations # Рекомендации
|
GET /api/v1/movies/{id}/recommendations # Рекомендации
|
||||||
GET /api/v1/movies/{id}/similar # Похожие
|
GET /api/v1/movies/{id}/similar # Похожие
|
||||||
@@ -123,8 +102,6 @@ GET /api/v1/movies/{id}/similar # Похожие
|
|||||||
GET /api/v1/tv/search # Поиск сериалов
|
GET /api/v1/tv/search # Поиск сериалов
|
||||||
GET /api/v1/tv/popular # Популярные
|
GET /api/v1/tv/popular # Популярные
|
||||||
GET /api/v1/tv/top-rated # Топ-рейтинговые
|
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} # Детали сериала (устар.)
|
||||||
### 🔓 Публичные маршруты (унифицированные)
|
### 🔓 Публичные маршруты (унифицированные)
|
||||||
|
|
||||||
|
|||||||
@@ -161,8 +161,8 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec {
|
|||||||
OpenAPI: "3.0.0",
|
OpenAPI: "3.0.0",
|
||||||
Info: Info{
|
Info: Info{
|
||||||
Title: "Neo Movies API",
|
Title: "Neo Movies API",
|
||||||
Description: "Унифицированный API (TMDB/Kinopoisk) с префиксными ID (kp_*, tmdb_*) и единым форматом данных",
|
Description: "Унифицированный API (TMDB/Kinopoisk) с префиксными ID (kp_*, tmdb_*) и единым форматом данных",
|
||||||
Version: "3.0.0",
|
Version: "3.0.0",
|
||||||
Contact: Contact{
|
Contact: Contact{
|
||||||
Name: "API Support",
|
Name: "API Support",
|
||||||
URL: "https://github.com/your-username/neomovies-api-go",
|
URL: "https://github.com/your-username/neomovies-api-go",
|
||||||
@@ -194,10 +194,10 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"/api/v1/search": map[string]interface{}{
|
"/api/v1/search": map[string]interface{}{
|
||||||
"get": map[string]interface{}{
|
"get": map[string]interface{}{
|
||||||
"summary": "Унифицированный поиск",
|
"summary": "Унифицированный поиск",
|
||||||
"description": "Поиск фильмов и сериалов в источниках TMDB или Kinopoisk",
|
"description": "Поиск фильмов и сериалов в источниках TMDB или Kinopoisk",
|
||||||
"tags": []string{"Search"},
|
"tags": []string{"Search"},
|
||||||
"parameters": []map[string]interface{}{
|
"parameters": []map[string]interface{}{
|
||||||
{
|
{
|
||||||
@@ -207,13 +207,13 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec {
|
|||||||
"schema": map[string]string{"type": "string"},
|
"schema": map[string]string{"type": "string"},
|
||||||
"description": "Поисковый запрос",
|
"description": "Поисковый запрос",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "source",
|
"name": "source",
|
||||||
"in": "query",
|
"in": "query",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": map[string]interface{}{"type": "string", "enum": []string{"kp", "tmdb"}},
|
"schema": map[string]interface{}{"type": "string", "enum": []string{"kp", "tmdb"}},
|
||||||
"description": "Источник: kp или tmdb",
|
"description": "Источник: kp или tmdb",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "page",
|
"name": "page",
|
||||||
"in": "query",
|
"in": "query",
|
||||||
@@ -223,7 +223,7 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec {
|
|||||||
},
|
},
|
||||||
"responses": map[string]interface{}{
|
"responses": map[string]interface{}{
|
||||||
"200": map[string]interface{}{
|
"200": map[string]interface{}{
|
||||||
"description": "Результаты поиска (унифицированные)",
|
"description": "Результаты поиска (унифицированные)",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -342,57 +342,57 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"/api/v1/players/lumex/{imdb_id}": map[string]interface{}{
|
"/api/v1/players/lumex/{imdb_id}": map[string]interface{}{
|
||||||
"get": map[string]interface{}{
|
"get": map[string]interface{}{
|
||||||
"summary": "Плеер Lumex",
|
"summary": "Плеер Lumex",
|
||||||
"description": "Получение плеера Lumex по IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID",
|
"description": "Получение плеера Lumex по IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID",
|
||||||
"tags": []string{"Players"},
|
"tags": []string{"Players"},
|
||||||
"parameters": []map[string]interface{}{
|
"parameters": []map[string]interface{}{
|
||||||
{
|
{
|
||||||
"name": "imdb_id",
|
"name": "imdb_id",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": map[string]string{"type": "string"},
|
"schema": map[string]string{"type": "string"},
|
||||||
"description": "IMDb ID фильма или сериала (например, tt0133093)",
|
"description": "IMDb ID фильма или сериала (например, tt0133093)",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
"responses": map[string]interface{}{
|
||||||
"responses": map[string]interface{}{
|
"200": map[string]interface{}{
|
||||||
"200": map[string]interface{}{
|
"description": "HTML со встроенным Lumex плеером",
|
||||||
"description": "HTML со встроенным Lumex плеером",
|
"content": map[string]interface{}{
|
||||||
"content": map[string]interface{}{
|
"text/html": map[string]interface{}{},
|
||||||
"text/html": map[string]interface{}{},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
"/api/v1/players/vibix/{imdb_id}": map[string]interface{}{
|
||||||
"/api/v1/players/vibix/{imdb_id}": map[string]interface{}{
|
"get": map[string]interface{}{
|
||||||
"get": map[string]interface{}{
|
"summary": "Vibix плеер по IMDb ID",
|
||||||
"summary": "Vibix плеер по IMDb ID",
|
"description": "Возвращает HTML-страницу с iframe Vibix для указанного IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID",
|
||||||
"description": "Возвращает HTML-страницу с iframe Vibix для указанного IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID",
|
"tags": []string{"Players"},
|
||||||
"tags": []string{"Players"},
|
"parameters": []map[string]interface{}{
|
||||||
"parameters": []map[string]interface{}{
|
{
|
||||||
{
|
"name": "imdb_id",
|
||||||
"name": "imdb_id",
|
"in": "path",
|
||||||
"in": "path",
|
"required": true,
|
||||||
"required": true,
|
"schema": map[string]string{"type": "string"},
|
||||||
"schema": map[string]string{"type": "string"},
|
"description": "IMDb ID, например tt0133093",
|
||||||
"description": "IMDb ID, например tt0133093",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"responses": map[string]interface{}{
|
|
||||||
"200": map[string]interface{}{
|
|
||||||
"description": "HTML со встроенным Vibix плеером",
|
|
||||||
"content": map[string]interface{}{
|
|
||||||
"text/html": map[string]interface{}{},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"404": map[string]interface{}{"description": "Фильм не найден"},
|
"responses": map[string]interface{}{
|
||||||
"503": map[string]interface{}{"description": "VIBIX_TOKEN не настроен"},
|
"200": map[string]interface{}{
|
||||||
|
"description": "HTML со встроенным Vibix плеером",
|
||||||
|
"content": map[string]interface{}{
|
||||||
|
"text/html": map[string]interface{}{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"404": map[string]interface{}{"description": "Фильм не найден"},
|
||||||
|
"503": map[string]interface{}{"description": "VIBIX_TOKEN не настроен"},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
"/api/v1/players/vidsrc/{media_type}/{imdb_id}": map[string]interface{}{
|
||||||
"/api/v1/players/vidsrc/{media_type}/{imdb_id}": map[string]interface{}{
|
|
||||||
"get": map[string]interface{}{
|
"get": map[string]interface{}{
|
||||||
"summary": "Vidsrc плеер (английский)",
|
"summary": "Vidsrc плеер (английский)",
|
||||||
"description": "Возвращает HTML-страницу с iframe Vidsrc.to. Использует IMDb ID для фильмов и сериалов. Пример URL для фильма: https://vidsrc.to/embed/movie/tt1234567, для сериала: https://vidsrc.to/embed/tv/tt6385540/1/1",
|
"description": "Возвращает HTML-страницу с iframe Vidsrc.to. Использует IMDb ID для фильмов и сериалов. Пример URL для фильма: https://vidsrc.to/embed/movie/tt1234567, для сериала: https://vidsrc.to/embed/tv/tt6385540/1/1",
|
||||||
@@ -613,7 +613,6 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"/api/v1/torrents/search/{imdbId}": map[string]interface{}{
|
"/api/v1/torrents/search/{imdbId}": map[string]interface{}{
|
||||||
"get": map[string]interface{}{
|
"get": map[string]interface{}{
|
||||||
"summary": "Поиск торрентов",
|
"summary": "Поиск торрентов",
|
||||||
@@ -1232,30 +1231,6 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"/api/v1/movies/now-playing": map[string]interface{}{
|
|
||||||
"get": map[string]interface{}{
|
|
||||||
"summary": "Сейчас в прокате",
|
|
||||||
"description": "Получение списка фильмов, которые сейчас в прокате",
|
|
||||||
"tags": []string{"Movies"},
|
|
||||||
"parameters": []map[string]interface{}{
|
|
||||||
{
|
|
||||||
"name": "page",
|
|
||||||
"in": "query",
|
|
||||||
"schema": map[string]string{"type": "integer", "default": "1"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "language",
|
|
||||||
"in": "query",
|
|
||||||
"schema": map[string]string{"type": "string", "default": "ru-RU"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"responses": map[string]interface{}{
|
|
||||||
"200": map[string]interface{}{
|
|
||||||
"description": "Список фильмов в прокате",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"/api/v1/movies/{id}/recommendations": map[string]interface{}{
|
"/api/v1/movies/{id}/recommendations": map[string]interface{}{
|
||||||
"get": map[string]interface{}{
|
"get": map[string]interface{}{
|
||||||
"summary": "Рекомендации фильмов",
|
"summary": "Рекомендации фильмов",
|
||||||
|
|||||||
Reference in New Issue
Block a user