From ea5b53d20ea578ece7eefeee46074c4cca100c52 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:56:41 +0500 Subject: [PATCH] Update episode.js --- api/v1/src/episode.js | 146 +++++++++++++++++------------------------- 1 file changed, 58 insertions(+), 88 deletions(-) diff --git a/api/v1/src/episode.js b/api/v1/src/episode.js index c1b3f07..beb3192 100644 --- a/api/v1/src/episode.js +++ b/api/v1/src/episode.js @@ -1,123 +1,93 @@ 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); + const response = await axios.get(url); + const data = response.data; - if (!data.types || data.types.length === 0) throw new Error("Empty types"); - - data.types = data.types.map(type => ({ + // Изменение структуры поля `workers` + data.types = data.types.map((type) => ({ ...type, + // id: 0, workers: "источник: seele.su", + // name: "Недоступно (⁠≧⁠▽⁠≦⁠)", + // icon: null, + // view_count: null, + // pinned: false, + // episodes_count: null, })); + // Если список `types` пуст, обращаемся к Seele API + if (data.code === 1 || data.types.length === 0) { + return await getEpisodeFromSeele(releaseId, token); + } return data; - } catch { - return await getEpisodeTypesFromSeele(releaseId, token); + } catch (error) { + console.error("Ошибка при запросе к Anixart API:", error.message); + throw new Error("Ошибка при получении данных из Anixart API"); } } -// ===== Получение источников видео (по озвучке) ===== -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 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 await getEpisodesFromSeele(releaseId, typeId, sourceId, token); - } -} - -// ===== Seele API fallback (если Anixart недоступен) ===== -async function getEpisodeTypesFromSeele(releaseId, token = '') { +// Функция для запроса к Seele API +async function getEpisodeFromSeele(releaseId, token = '') { const url = `https://cloud.seele.su/episode/${releaseId}.json${token ? `?token=${token}` : ''}`; try { - const { data } = await axios.get(url); + const response = await axios.get(url); + const data = response.data; - if (!data.types || data.types.length === 0) return getCustomNotFoundResponse(); + // Проверяем наличие `types`, если пусто - возвращаем кастомный ответ + if (!data.types || data.types.length === 0) { + return getCustomNotFoundResponse(); + } - data.types = data.types.map(type => ({ + // Изменение структуры поля `workers` + data.types = data.types.map((type) => ({ ...type, workers: "источник: seele.su", })); return data; } catch (error) { - if (error.response?.status === 404) return getCustomNotFoundResponse(); + // Если ошибка - 404, возвращаем кастомный ответ + if (error.response && error.response.status === 404) { + return getCustomNotFoundResponse(); + } + console.error("Ошибка при запросе к Seele API:", error.message); throw new Error("Ошибка при получении данных из Seele API"); } } -// ===== Заглушки (если нет Seele API для sources/episodes) ===== -async function getSourcesFromSeele(releaseId, typeId, token = '') { - return { code: 0, sources: [] }; -} - -async function getEpisodesFromSeele(releaseId, typeId, sourceId, token = '') { - return { code: 0, episodes: [] }; -} - -// ===== Заглушка, если вообще ничего нет ===== +// Функция для создания кастомного JSON-ответа function getCustomNotFoundResponse() { - return { - code: 0, - types: [ + return { + "code": 0, + "types": [ { - id: 1, - name: "К сожалению, это аниме недоступно!", - icon: "https://cloud.seele.su/images/seele.jpg", - workers: "Это аниме полностью удалено с сервера anixart, либо его там не было изначально.", - is_sub: false, - episodes_count: 0, - view_count: 0, - pinned: false, + "@id": 1, + "id": 1, + "name": "К сожалению, это аниме недоступно!", + "icon": "https://cloud.seele.su/images/seele.jpg", + "workers": "Это аниме полностью удалено с сервера anixart, либо его там не было изначально.", + "is_sub": false, + "episodes_count": 0, + "view_count": 0, + "pinned": false }, { - id: 2, - name: "Не забудьте подписаться на наш Telegram-канал", - icon: "https://cloud.seele.su/images/seele.jpg", - workers: "Тгк: @seele_channel", - is_sub: false, - episodes_count: 0, - view_count: 0, - pinned: false, - }, - ], + "@id": 2, + "id": 2, + "name": "Не забудьте подписаться на наш Telegram-канал 😊", + "icon": "https://cloud.seele.su/images/seele.jpg", + "workers": "Тгк: @seele_channel", + "is_sub": false, + "episodes_count": 0, + "view_count": 0, + "pinned": false + } + ] }; } -module.exports = { - getEpisodeFromAnixart, - getSources, - getEpisodes, -}; +module.exports = { getEpisodeFromAnixart };