Update release.js

This commit is contained in:
2025-05-12 13:48:42 +05:00
committed by GitHub
parent 72b96a274c
commit c8c7582219

View File

@@ -1,86 +1,47 @@
const axios = require('axios');
async function getReleaseFromAnixart(releaseId) {
const url = `https://api.anixart.tv/release/${releaseId}`;
// Кэш кастомных заметок
let cachedNotes = [];
// Функция для загрузки заметок из внешнего API
async function fetchNotes() {
try {
const response = await axios.get('https://anixart.seele.su/api/release_note');
cachedNotes = Array.isArray(response.data) ? response.data : [];
} catch {
cachedNotes = [];
}
}
// Загружаем заметки сразу при запуске
fetchNotes();
// Обновляем заметки каждые 10 минут
setInterval(fetchNotes, 10 * 60 * 1000);
// Основная функция-парсер
async function getReleaseFromAnixart(releaseId, token = '') {
const url = `https://api.anixart.tv/release/${releaseId}${token ? `?token=${token}` : ''}`;
try {
// Запрос к API Anixart с увеличенным таймаутом
const response = await axios.get(url, {
timeout: 10000, // Таймаут 10 секунд
});
const response = await axios.get(url);
const releaseData = response.data;
if (!releaseData || !releaseData.release) {
releaseData = { code: 0, release: {} }; // Инициализируем, если данных нет
if (!releaseData.release) {
releaseData.release = {};
}
// Извлекаем оригинальное примечание и название
const originalNote = releaseData.release.note || '';
const titleOriginal = releaseData.release.title_original || '';
// Инициализируем note
let noteContent = '';
if (originalNote) {
noteContent += `<b>Примечание от Anixart:</b><br>${originalNote}<br>`;
// Применяем кастомный note, если он есть
const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId));
if (noteEntry) {
releaseData.release.note = noteEntry.note;
}
// Поиск аниме в Shikimori
let shikimoriScore = 'N/A';
let mainCharacters = [];
if (titleOriginal) {
const shikimoriResponse = await axios.get('https://shikimori.one/api/animes', {
params: {
search: encodeURIComponent(titleOriginal),
limit: 1,
},
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
},
timeout: 5000,
});
const shikimoriAnime = shikimoriResponse.data[0];
if (shikimoriAnime) {
shikimoriScore = shikimoriAnime.score || 'N/A';
// Получаем персонажей
const rolesResponse = await axios.get(`https://shikimori.one/api/animes/${shikimoriAnime.id}/roles`, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
},
timeout: 5000,
});
mainCharacters = rolesResponse.data
.filter(role => role.roles.includes('Main'))
.map(role => role.character)
.filter(char => char && char.name && char.url)
.slice(0, 3)
.map(char => char.name); // Берем только имена
}
}
// Формируем note
if (shikimoriScore !== 'N/A' || mainCharacters.length > 0) {
noteContent += `<b>Оценки из Shikimori:</b> ${shikimoriScore}<br>`;
}
if (mainCharacters.length > 0) {
noteContent += `<b>Главные персонажи:</b> ${mainCharacters.join(', ')}<br>`;
}
// Применяем note
releaseData.release.note = noteContent || '';
return releaseData;
} catch (error) {
// Обработка ошибки с более точным выводом
} catch {
return {
code: 2,
release: null,
error: error.message, // Для отладки (можно убрать)
};
}
}