From c8c758221924b83f4a21aa2a8cd5ef96251efd5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=BC=E3=83=BC=E3=83=AC?= Date: Mon, 12 May 2025 13:48:42 +0500 Subject: [PATCH] Update release.js --- api/v1/src/release.js | 99 +++++++++++++------------------------------ 1 file changed, 30 insertions(+), 69 deletions(-) diff --git a/api/v1/src/release.js b/api/v1/src/release.js index 09d83ef..34c24ed 100644 --- a/api/v1/src/release.js +++ b/api/v1/src/release.js @@ -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 += `Примечание от Anixart:
${originalNote}
`; + // Применяем кастомный 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 += `Оценки из Shikimori: ${shikimoriScore}
`; - } - - if (mainCharacters.length > 0) { - noteContent += `Главные персонажи: ${mainCharacters.join(', ')}
`; - } - - // Применяем note - releaseData.release.note = noteContent || ''; - return releaseData; - } catch (error) { - // Обработка ошибки с более точным выводом + } catch { return { code: 2, release: null, - error: error.message, // Для отладки (можно убрать) }; } }