Update episode.js

This commit is contained in:
2025-05-08 20:56:41 +05:00
committed by GitHub
parent 99df7234d9
commit ea5b53d20e

View File

@@ -1,123 +1,93 @@
const axios = require('axios'); const axios = require('axios');
// ===== Основная функция (старое имя) ===== // Функция для запроса к Anixart API
async function getEpisodeFromAnixart(releaseId, token = '') { 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}` : ''}`; const url = `https://api.anixart.tv/episode/${releaseId}${token ? `?token=${token}` : ''}`;
try { 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"); // Изменение структуры поля `workers`
data.types = data.types.map((type) => ({
data.types = data.types.map(type => ({
...type, ...type,
// id: 0,
workers: "источник: seele.su", 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; return data;
} catch { } catch (error) {
return await getEpisodeTypesFromSeele(releaseId, token); console.error("Ошибка при запросе к Anixart API:", error.message);
throw new Error("Ошибка при получении данных из Anixart API");
} }
} }
// ===== Получение источников видео (по озвучке) ===== // Функция для запроса к Seele API
async function getSources(releaseId, typeId, token = '') { async function getEpisodeFromSeele(releaseId, 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 = '') {
const url = `https://cloud.seele.su/episode/${releaseId}.json${token ? `?token=${token}` : ''}`; const url = `https://cloud.seele.su/episode/${releaseId}.json${token ? `?token=${token}` : ''}`;
try { 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, ...type,
workers: "источник: seele.su", workers: "источник: seele.su",
})); }));
return data; return data;
} catch (error) { } 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"); throw new Error("Ошибка при получении данных из Seele API");
} }
} }
// ===== Заглушки (если нет Seele API для sources/episodes) ===== // Функция для создания кастомного JSON-ответа
async function getSourcesFromSeele(releaseId, typeId, token = '') {
return { code: 0, sources: [] };
}
async function getEpisodesFromSeele(releaseId, typeId, sourceId, token = '') {
return { code: 0, episodes: [] };
}
// ===== Заглушка, если вообще ничего нет =====
function getCustomNotFoundResponse() { function getCustomNotFoundResponse() {
return { return {
code: 0, "code": 0,
types: [ "types": [
{ {
id: 1, "@id": 1,
name: "К сожалению, это аниме недоступно!", "id": 1,
icon: "https://cloud.seele.su/images/seele.jpg", "name": "К сожалению, это аниме недоступно!",
workers: "Это аниме полностью удалено с сервера anixart, либо его там не было изначально.", "icon": "https://cloud.seele.su/images/seele.jpg",
is_sub: false, "workers": "Это аниме полностью удалено с сервера anixart, либо его там не было изначально.",
episodes_count: 0, "is_sub": false,
view_count: 0, "episodes_count": 0,
pinned: false, "view_count": 0,
"pinned": false
}, },
{ {
id: 2, "@id": 2,
name: "Не забудьте подписаться на наш Telegram-канал", "id": 2,
icon: "https://cloud.seele.su/images/seele.jpg", "name": "Не забудьте подписаться на наш Telegram-канал 😊",
workers: "Тгк: @seele_channel", "icon": "https://cloud.seele.su/images/seele.jpg",
is_sub: false, "workers": "Тгк: @seele_channel",
episodes_count: 0, "is_sub": false,
view_count: 0, "episodes_count": 0,
pinned: false, "view_count": 0,
}, "pinned": false
], }
]
}; };
} }
module.exports = { module.exports = { getEpisodeFromAnixart };
getEpisodeFromAnixart,
getSources,
getEpisodes,
};