From 02411df6661858d1f316c6c88cfe61cd525b51ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=BC=E3=83=BC=E3=83=AC?= Date: Tue, 27 May 2025 19:44:20 +0500 Subject: [PATCH] Update episode.js --- api/v1/src/episode.js | 116 +++++++++++++++++++++++++++--------------- 1 file changed, 76 insertions(+), 40 deletions(-) diff --git a/api/v1/src/episode.js b/api/v1/src/episode.js index beb3192..2313fd7 100644 --- a/api/v1/src/episode.js +++ b/api/v1/src/episode.js @@ -1,28 +1,40 @@ const axios = require('axios'); +const fs = require('fs'); +const loginList = require('./login.json'); -// Функция для запроса к Anixart API +// Получить логин по токену +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 = '') { + 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}` : ''}`; try { - const response = await axios.get(url); - const data = response.data; + const { data } = await axios.get(url); - // Изменение структуры поля `workers` - data.types = data.types.map((type) => ({ + 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 (error) { console.error("Ошибка при запросе к Anixart API:", error.message); @@ -30,28 +42,53 @@ 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 + } + ] + }; +} + 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; + const { data } = await axios.get(url); - // Проверяем наличие `types`, если пусто - возвращаем кастомный ответ if (!data.types || data.types.length === 0) { return getCustomNotFoundResponse(); } - // Изменение структуры поля `workers` - data.types = data.types.map((type) => ({ + data.types = data.types.map(type => ({ ...type, workers: "источник: seele.su", })); return data; } catch (error) { - // Если ошибка - 404, возвращаем кастомный ответ - if (error.response && error.response.status === 404) { + if (error.response?.status === 404) { return getCustomNotFoundResponse(); } console.error("Ошибка при запросе к Seele API:", error.message); @@ -59,32 +96,31 @@ async function getEpisodeFromSeele(releaseId, token = '') { } } -// Функция для создания кастомного JSON-ответа function getCustomNotFoundResponse() { - return { - "code": 0, - "types": [ + 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: 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 + 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 } ] };