Update episode.js

This commit is contained in:
2025-05-27 19:37:38 +05:00
committed by GitHub
parent 5a9b6da997
commit f16908d630

View File

@@ -1,28 +1,46 @@
const axios = require('axios'); const axios = require('axios');
const fs = require('fs');
const path = require('path');
// Функция для запроса к Anixart API const loginList = JSON.parse(
fs.readFileSync(path.join(__dirname, 'login.json'), 'utf8')
);
// Получить логин по токену
async function getLoginFromToken(token) {
try {
const response = await axios.get(`https://api.anixart.tv/profile/preference/login/info?token=${token}`);
return response.data.login;
} catch (error) {
console.error("Ошибка при получении логина по токену:", error.message);
return null;
}
}
// Главная функция получения эпизода
async function getEpisodeFromAnixart(releaseId, token = '') { async function getEpisodeFromAnixart(releaseId, token = '') {
const login = token ? await getLoginFromToken(token) : null;
const allowedLogins = loginList.map(u => u.login);
// Проверка доступа
if (!login || !allowedLogins.includes(login)) {
return getAccessDeniedResponse();
}
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 response = await axios.get(url); const response = await axios.get(url);
const data = response.data; const data = response.data;
// Изменение структуры поля `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) { if (data.code === 1 || data.types.length === 0) {
return await getEpisodeFromSeele(releaseId, token); return await getEpisodeFromSeele(releaseId, token);
} }
return data; return data;
} catch (error) { } catch (error) {
console.error("Ошибка при запросе к Anixart API:", error.message); console.error("Ошибка при запросе к Anixart API:", error.message);
@@ -30,19 +48,48 @@ async function getEpisodeFromAnixart(releaseId, token = '') {
} }
} }
// Функция для запроса к Seele API // Ответ если нет доступа
function getAccessDeniedResponse() {
return {
code: 0,
types: [
{
"@id": 1,
id: 1,
name: "Для просмотра требуется Anixart EX",
icon: "https://cloud.seele.su/images/seele.jpg",
workers: "Купить доступ: @seele_off",
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
}
]
};
}
// Seele fallback
async function getEpisodeFromSeele(releaseId, token = '') { async function getEpisodeFromSeele(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 response = await axios.get(url); const response = await axios.get(url);
const data = response.data; const data = response.data;
// Проверяем наличие `types`, если пусто - возвращаем кастомный ответ
if (!data.types || data.types.length === 0) { if (!data.types || data.types.length === 0) {
return getCustomNotFoundResponse(); return getCustomNotFoundResponse();
} }
// Изменение структуры поля `workers`
data.types = data.types.map((type) => ({ data.types = data.types.map((type) => ({
...type, ...type,
workers: "источник: seele.su", workers: "источник: seele.su",
@@ -50,7 +97,6 @@ async function getEpisodeFromSeele(releaseId, token = '') {
return data; return data;
} catch (error) { } catch (error) {
// Если ошибка - 404, возвращаем кастомный ответ
if (error.response && error.response.status === 404) { if (error.response && error.response.status === 404) {
return getCustomNotFoundResponse(); return getCustomNotFoundResponse();
} }
@@ -59,32 +105,31 @@ async function getEpisodeFromSeele(releaseId, token = '') {
} }
} }
// Функция для создания кастомного JSON-ответа
function getCustomNotFoundResponse() { function getCustomNotFoundResponse() {
return { return {
"code": 0, code: 0,
"types": [ types: [
{ {
"@id": 1, "@id": 1,
"id": 1, id: 1,
"name": "К сожалению, это аниме недоступно!", name: "К сожалению, это аниме недоступно!",
"icon": "https://cloud.seele.su/images/seele.jpg", icon: "https://cloud.seele.su/images/seele.jpg",
"workers": "Это аниме полностью удалено с сервера anixart, либо его там не было изначально.", workers: "Это аниме полностью удалено с сервера anixart, либо его там не было изначально.",
"is_sub": false, is_sub: false,
"episodes_count": 0, episodes_count: 0,
"view_count": 0, view_count: 0,
"pinned": false pinned: false
}, },
{ {
"@id": 2, "@id": 2,
"id": 2, id: 2,
"name": "Не забудьте подписаться на наш Telegram-канал 😊", name: "Не забудьте подписаться на наш Telegram-канал",
"icon": "https://cloud.seele.su/images/seele.jpg", icon: "https://cloud.seele.su/images/seele.jpg",
"workers": "Тгк: @seele_channel", workers: "ТГК: @seele_channel",
"is_sub": false, is_sub: false,
"episodes_count": 0, episodes_count: 0,
"view_count": 0, view_count: 0,
"pinned": false pinned: false
} }
] ]
}; };