Update 2 files

- /src/api.ts
- /src/lib/api.ts
This commit is contained in:
2025-01-16 15:45:32 +00:00
parent 38cc458fe7
commit 22be996125
2 changed files with 59 additions and 206 deletions

View File

@@ -1,97 +0,0 @@
import axios from 'axios';
const BASE_URL = '/api/movies';
if (typeof window === 'undefined' && !process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN) {
throw new Error('TMDB_ACCESS_TOKEN is not defined in environment variables');
}
export const api = axios.create({
baseURL: BASE_URL,
headers: {
'Content-Type': 'application/json'
}
});
export interface MovieDetails extends Movie {
genres: Genre[];
runtime: number;
tagline: string;
budget: number;
revenue: number;
videos: {{
"page": 1,
"results": [
{
"id": 123,
"title": "Movie Title",
"overview": "Movie description",
"poster_path": "/path/to/poster.jpg",
...
},
...
],
"total_pages": 500,
"total_results": 10000
}
results: Video[];
};
credits: {
cast: Cast[];
crew: Crew[];
};
}
export interface Video {
id: string;
key: string;
name: string;
site: string;
type: string;
}
export interface Cast {
id: number;
name: string;
character: string;
profile_path: string | null;
}
export interface Crew {
id: number;
name: string;
job: string;
profile_path: string | null;
}
export const moviesAPI = {
// Получение популярных фильмов
async getPopular(page = 1) {
const response = await api.get(`/popular?page=${page}`);
return response.data;
},
// Получение данных о фильме
async getMovie(id: string | number) {
const response = await api.get(`/${id}`);
return response.data;
},
// Поиск фильмов
async searchMovies(query: string, page = 1) {
const response = await api.get(`/search?query=${encodeURIComponent(query)}&page=${page}`);
return response.data;
},
// Получение предстоящих фильмов
async getUpcoming(page = 1) {
const response = await api.get(`/upcoming?page=${page}`);
return response.data;
},
// Получение топ рейтинговых фильмов
async getTopRated(page = 1) {
const response = await api.get(`/top-rated?page=${page}`);
return response.data;
}
};

View File

@@ -1,15 +1,14 @@
import axios from 'axios';
const BASE_URL = 'https://api.themoviedb.org/3';
const API_URL = process.env.NEXT_PUBLIC_API_URL;
if (typeof window === 'undefined' && !process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN) {
throw new Error('TMDB_ACCESS_TOKEN is not defined in environment variables');
if (!API_URL) {
throw new Error('NEXT_PUBLIC_API_URL is not defined in environment variables');
}
export const api = axios.create({
baseURL: BASE_URL,
baseURL: API_URL,
headers: {
'Authorization': `Bearer ${process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
}
});
@@ -104,14 +103,14 @@ export interface Crew {
profile_path: string | null;
}
interface MovieResponse {
export interface MovieResponse {
page: number;
results: Movie[];
total_pages: number;
total_results: number;
}
interface TVShowResponse {
export interface TVShowResponse {
page: number;
results: TVShow[];
total_pages: number;
@@ -120,136 +119,87 @@ interface TVShowResponse {
export const moviesAPI = {
// Получение популярных фильмов
getPopular: (page = 1) =>
api.get<MovieResponse>('/movie/popular', {
params: {
page,
language: 'ru-RU',
}
}),
getPopular(page = 1) {
return api.get<MovieResponse>('/movies/popular', {
params: { page }
});
},
// Получение данных о фильме по его TMDB ID
getMovie: (id: string | number) =>
api.get<MovieDetails>(`/movie/${id}`, {
params: {
language: 'ru-RU',
append_to_response: 'credits,videos,similar'
}
}),
getMovie(id: string | number) {
return api.get<MovieDetails>(`/movies/${id}`);
},
// Получение IMDb ID по TMDB ID для плеера
getImdbId: async (tmdbId: string | number) => {
try {
const response = await api.get(`/movie/${tmdbId}/external_ids`);
return response.data.imdb_id;
} catch (error) {
console.error('Ошибка при получении IMDb ID:', error);
return null;
}
getImdbId(tmdbId: string | number) {
return api.get<{ imdb_id: string }>(`/movies/${tmdbId}/external-ids`);
},
// Получение видео по TMDB ID для плеера
getVideo: async (tmdbId: string | number) => {
try {
const response = await api.get(`/movie/${tmdbId}/videos`, {
params: {
language: 'ru-RU',
},
});
return response.data.results;
} catch (error) {
console.error('Ошибка при получении видео:', error);
return [];
}
getVideo(tmdbId: string | number) {
return api.get<{ results: Video[] }>(`/movies/${tmdbId}/videos`);
},
// Поиск фильмов
searchMovies: (query: string, page = 1) =>
api.get<MovieResponse>('/search/movie', {
params: {
query,
page,
language: 'ru-RU',
}
}),
searchMovies(query: string, page = 1) {
return api.get<MovieResponse>('/movies/search', {
params: { query, page }
});
},
// Получение предстоящих фильмов
getUpcoming: (page = 1) =>
api.get('/movie/upcoming', {
params: {
page,
language: 'ru-RU',
}
}),
getUpcoming(page = 1) {
return api.get<MovieResponse>('/movies/upcoming', {
params: { page }
});
},
// Получение лучших фильмов
getTopRated: (page = 1) =>
api.get('/movie/top_rated', {
params: {
page,
language: 'ru-RU',
'vote_count.gte': 100
}
}),
getTopRated(page = 1) {
return api.get<MovieResponse>('/movies/top-rated', {
params: { page }
});
},
// Получение фильмов по жанру
getMoviesByGenre: (genreId: number, page = 1) =>
api.get('/discover/movie', {
params: {
with_genres: genreId,
page,
language: 'ru-RU',
'vote_count.gte': 100,
'vote_average.gte': 1,
sort_by: 'popularity.desc',
include_adult: false,
'primary_release_date.lte': new Date().toISOString().split('T')[0]
getMoviesByGenre(genreId: number, page = 1) {
return api.get<MovieResponse>('/movies/genre/' + genreId, {
params: { page }
});
}
}),
};
export const tvAPI = {
// Получение популярных сериалов
getPopular: (page = 1) =>
api.get<TVShowResponse>('/tv/popular', {
params: {
page,
language: 'ru-RU',
}
}),
getPopular(page = 1) {
return api.get<TVShowResponse>('/tv/popular', {
params: { page }
});
},
// Получение данных о сериале по его TMDB ID
getShow: (id: string | number) =>
api.get<TVShowDetails>(`/tv/${id}`, {
params: {
language: 'ru-RU',
append_to_response: 'credits,external_ids',
}
}),
getShow(id: string | number) {
return api.get<TVShowDetails>(`/tv/${id}`);
},
// Получение IMDb ID по TMDB ID для плеера
getImdbId: (tmdbId: string | number) =>
api.get<{ imdb_id: string | null }>(`/tv/${tmdbId}/external_ids`),
getImdbId(tmdbId: string | number) {
return api.get<{ imdb_id: string }>(`/tv/${tmdbId}/external-ids`);
},
// Поиск сериалов
searchShows: (query: string, page = 1) =>
api.get<TVShowResponse>('/search/tv', {
params: {
query,
page,
language: 'ru-RU',
searchShows(query: string, page = 1) {
return api.get<TVShowResponse>('/tv/search', {
params: { query, page }
});
}
}),
};
// Мультипоиск (фильмы и сериалы)
export const searchAPI = {
multiSearch: (query: string, page = 1) =>
api.get('/search/multi', {
params: {
query,
page,
language: 'ru-RU',
multiSearch(query: string, page = 1) {
return api.get('/search/multi', {
params: { query, page }
});
}
}),
};