Update index.js

This commit is contained in:
2025-05-08 20:54:41 +05:00
committed by GitHub
parent 2f47a5d086
commit bb4a1847fb

View File

@@ -1,95 +1,103 @@
const express = require('express');
const { getEpisodeFromAnixart } = require('./src/episode');
const getVerifiedUsers = require('./src/is_verified');
const getRolesUsers = require('./src/is_roles');
const { getProfileFromAnixart } = require('./src/profile');
const getToggles = require('./src/toggles');
const axios = require('axios');
const app = express();
const PORT = 3000;
// Функция для запроса к Anixart API с поддержкой releaseId, typeId и sourceId
async function getEpisodeFromAnixart(releaseId, token = '', typeId = '', sourceId = '') {
let url = `https://api.anixart.tv/episode/${releaseId}`;
// Новый эндпоинты Открываем
// Эндпоинт для получения Verified
app.get('/api/is_roles', (req, res) => {
try {
const data = getRolesUsers();
res.status(200).json(data);
} catch {
res.status(200).json([]);
// Если передан typeId, добавляем его в URL
if (typeId) {
url += `/${typeId}`;
}
});
// Эндпоинт для получения Verified
app.get('/api/is_verified', (req, res) => {
try {
const data = getVerifiedUsers();
res.status(200).json(data);
} catch {
res.status(200).json([]);
// Если передан sourceId, добавляем его в URL
if (sourceId) {
url += `/${sourceId}`;
}
// Если передан токен, добавляем его как query параметр
if (token) {
url += `?token=${token}`;
}
});
// Эндпоинт для получения профиля
app.get('/api/profile/:profileId', async (req, res) => {
const { profileId } = req.params;
const { token } = req.query;
try {
const data = await getProfileFromAnixart(profileId, token);
res.json(data);
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) {
res.status(500).json({ error: error.message });
}
});
console.error("Ошибка при запросе к Anixart API:", error.message);
// Эндпоинт для получения информации об эпизоде (Новый эндпоинт)
app.get('/api/episode/:releaseId/:typeId?/:sourceId?', async (req, res) => {
const { releaseId, typeId, sourceId } = req.params;
const { token } = req.query; // Извлекаем token из query-параметров
// Если ошибка 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 data = await getEpisodeFromAnixart(releaseId, token, typeId, sourceId);
res.json(data);
const response = await axios.get(url);
const data = response.data;
// Если нет данных по типам, возвращаем кастомный ответ
if (!data.types || data.types.length === 0) {
return getCustomNotFoundResponse();
}
// Возвращаем данные
return data;
} catch (error) {
res.status(500).json({ error: error.message });
if (error.response && error.response.status === 404) {
return getCustomNotFoundResponse();
}
console.error("Ошибка при запросе к Seele API:", error.message);
throw new Error("Ошибка при получении данных из Seele API");
}
});
}
// Эндпоинт для конфигурационного JSON из toggles.js
app.get('/api/config/toggles', async (req, res) => {
try {
const toggles = await getToggles();
res.json(toggles);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Функция для создания кастомного 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
}
]
};
}
// Старый эндпоинты Открываем
// Эндпоинт для получения информации об эпизоде (Старый эндпоинт)
app.get('/api/extension/episode/:releaseId', async (req, res) => {
const { releaseId } = req.params;
try {
const data = await getOldEpisodeFromAnixart(releaseId);
res.json(data);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Эндпоинт для конфигурационного JSON из toggles-old-1.js (Старый Toggles)
app.get('/api/extension/config/toggles', (req, res) => {
res.json(configDataOld);
});
// --------------------------
// Обработчик для всех неизвестных маршрутов
app.use((req, res) => {
res.status(404).json({ error: "Страница не существует!", status: 404 });
});
app.listen(PORT, () => {
console.log(`Сервер запущен на http://localhost:${PORT}`);
});
module.exports = { getEpisodeFromAnixart };