From 34bac3d9d95793d50a1d319915cd4173dbb5c4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=BC=E3=83=BC=E3=83=AC?= Date: Thu, 8 May 2025 20:46:45 +0500 Subject: [PATCH] Update episode.js --- api/v1/src/episode.js | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/api/v1/src/episode.js b/api/v1/src/episode.js index ace85f7..c1b3f07 100644 --- a/api/v1/src/episode.js +++ b/api/v1/src/episode.js @@ -1,53 +1,76 @@ const axios = require('axios'); -// ===== Anixart API ===== +// ===== Основная функция (старое имя) ===== +async function getEpisodeFromAnixart(releaseId, token = '') { + try { + const data = await getEpisodeTypes(releaseId, token); + return data; + } catch (error) { + console.error("Ошибка в getEpisodeFromAnixart:", error.message); + throw new Error("Не удалось получить данные с Anixart и Seele"); + } +} + +// ===== Получение списка озвучек ===== async function getEpisodeTypes(releaseId, token = '') { const url = `https://api.anixart.tv/episode/${releaseId}${token ? `?token=${token}` : ''}`; try { const { data } = await axios.get(url); + if (!data.types || data.types.length === 0) throw new Error("Empty types"); + data.types = data.types.map(type => ({ ...type, workers: "источник: seele.su", })); + return data; } catch { - return getEpisodeTypesFromSeele(releaseId, token); + return await getEpisodeTypesFromSeele(releaseId, token); } } +// ===== Получение источников видео (по озвучке) ===== async function getSources(releaseId, typeId, token = '') { const url = `https://api.anixart.tv/episode/${releaseId}/${typeId}${token ? `?token=${token}` : ''}`; try { const { data } = await axios.get(url); + if (!data.sources || data.sources.length === 0) throw new Error("Empty sources"); + return data; } catch { - return getSourcesFromSeele(releaseId, typeId, token); + return await getSourcesFromSeele(releaseId, typeId, token); } } +// ===== Получение эпизодов (по источнику) ===== async function getEpisodes(releaseId, typeId, sourceId, token = '') { const url = `https://api.anixart.tv/episode/${releaseId}/${typeId}/${sourceId}${token ? `?token=${token}` : ''}`; try { const { data } = await axios.get(url); + if (!data.episodes || data.episodes.length === 0) throw new Error("Empty episodes"); + return data; } catch { - return getEpisodesFromSeele(releaseId, typeId, sourceId, token); + return await getEpisodesFromSeele(releaseId, typeId, sourceId, token); } } -// ===== Seele Fallback API ===== +// ===== Seele API fallback (если Anixart недоступен) ===== async function getEpisodeTypesFromSeele(releaseId, token = '') { const url = `https://cloud.seele.su/episode/${releaseId}.json${token ? `?token=${token}` : ''}`; try { const { data } = await axios.get(url); + if (!data.types || data.types.length === 0) return getCustomNotFoundResponse(); + data.types = data.types.map(type => ({ ...type, workers: "источник: seele.su", })); + return data; } catch (error) { if (error.response?.status === 404) return getCustomNotFoundResponse(); @@ -55,7 +78,7 @@ async function getEpisodeTypesFromSeele(releaseId, token = '') { } } -// Заглушки — если в Seele реально нет таких endpoint +// ===== Заглушки (если нет Seele API для sources/episodes) ===== async function getSourcesFromSeele(releaseId, typeId, token = '') { return { code: 0, sources: [] }; } @@ -64,7 +87,7 @@ async function getEpisodesFromSeele(releaseId, typeId, sourceId, token = '') { return { code: 0, episodes: [] }; } -// ===== Кастомный ответ ===== +// ===== Заглушка, если вообще ничего нет ===== function getCustomNotFoundResponse() { return { code: 0, @@ -94,7 +117,7 @@ function getCustomNotFoundResponse() { } module.exports = { - getEpisodeTypes, + getEpisodeFromAnixart, getSources, getEpisodes, };