104 lines
3.6 KiB
JavaScript
104 lines
3.6 KiB
JavaScript
const axios = require('axios');
|
||
|
||
// Функция для запроса к Anixart API с поддержкой releaseId, typeId и sourceId
|
||
async function getEpisodeFromAnixart(releaseId, token = '', typeId = '', sourceId = '') {
|
||
let url = `https://api.anixart.tv/episode/${releaseId}`;
|
||
|
||
// Если передан typeId, добавляем его в URL
|
||
if (typeId) {
|
||
url += `/${typeId}`;
|
||
}
|
||
|
||
// Если передан sourceId, добавляем его в URL
|
||
if (sourceId) {
|
||
url += `/${sourceId}`;
|
||
}
|
||
|
||
// Если передан токен, добавляем его как query параметр
|
||
if (token) {
|
||
url += `?token=${token}`;
|
||
}
|
||
|
||
try {
|
||
const response = await axios.get(url);
|
||
const data = response.data;
|
||
|
||
// Проверяем структуру данных и, если что-то отсутствует, возвращаем кастомный ответ
|
||
if (data.code === 0 && !data.types) {
|
||
// Если нет данных о типах, обращаемся к Seele API
|
||
return await getEpisodeFromSeele(releaseId, token);
|
||
}
|
||
|
||
// Если данные по типам или источникам есть, возвращаем их
|
||
return data;
|
||
} catch (error) {
|
||
console.error("Ошибка при запросе к Anixart API:", error.message);
|
||
|
||
// Если ошибка 404, то пробуем получить данные с Seele API
|
||
if (error.response && error.response.status === 404) {
|
||
return await getEpisodeFromSeele(releaseId, token);
|
||
}
|
||
|
||
// В случае других ошибок
|
||
throw new Error("Ошибка при получении данных из Anixart API");
|
||
}
|
||
}
|
||
|
||
// Функция для запроса к Seele API
|
||
async function getEpisodeFromSeele(releaseId, token = '') {
|
||
const url = `https://cloud.seele.su/episode/${releaseId}.json${token ? `?token=${token}` : ''}`;
|
||
|
||
try {
|
||
const response = await axios.get(url);
|
||
const data = response.data;
|
||
|
||
// Если нет данных по типам, возвращаем кастомный ответ
|
||
if (!data.types || data.types.length === 0) {
|
||
return getCustomNotFoundResponse();
|
||
}
|
||
|
||
// Возвращаем данные
|
||
return data;
|
||
} catch (error) {
|
||
if (error.response && error.response.status === 404) {
|
||
return getCustomNotFoundResponse();
|
||
}
|
||
|
||
console.error("Ошибка при запросе к Seele API:", error.message);
|
||
throw new Error("Ошибка при получении данных из Seele API");
|
||
}
|
||
}
|
||
|
||
// Функция для создания кастомного JSON-ответа
|
||
function getCustomNotFoundResponse() {
|
||
return {
|
||
"code": 0,
|
||
"types": [
|
||
{
|
||
"@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,
|
||
"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 };
|