Update episode.js
This commit is contained in:
@@ -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: [
|
||||
"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 };
|
||||
|
||||
Reference in New Issue
Block a user