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