diff --git a/api/v1/src/release.js b/api/v1/src/release.js index 34c24ed..bd6cf8e 100644 --- a/api/v1/src/release.js +++ b/api/v1/src/release.js @@ -1,48 +1,54 @@ const axios = require('axios'); -// Кэш кастомных заметок -let cachedNotes = []; +// Получить данные из Shikimori +async function getShikimoriData(title) { + const searchUrl = `https://shikimori.one/api/animes?search=${encodeURIComponent(title)}&limit=1`; + const headers = { + 'User-Agent': 'Mozilla/5.0 FakeAgent', + 'Accept': 'application/json' + }; -// Функция для загрузки заметок из внешнего 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 = []; + const searchResponse = await axios.get(searchUrl, { headers }); + const anime = searchResponse.data[0]; + if (!anime) return null; + + const rolesUrl = `https://shikimori.one/api/animes/${anime.id}/roles`; + const rolesResponse = await axios.get(rolesUrl, { headers }); + + const characters = rolesResponse.data + .filter(c => c.roles.includes('Main')) + .slice(0, 3) + .map(c => + `${c.character.russian || c.character.name}` + ).join(', '); + + return `Оценки из Shikimori: ${anime.score || 'N/A'}★
Главные персонажи: ${characters}
`; + } catch (e) { + console.error('Shikimori API error:', e.message); + return null; } } -// Загружаем заметки сразу при запуске -fetchNotes(); - -// Обновляем заметки каждые 10 минут -setInterval(fetchNotes, 10 * 60 * 1000); - -// Основная функция-парсер +// Получить релиз с Anixart и дополнить данными из Shikimori async function getReleaseFromAnixart(releaseId, token = '') { const url = `https://api.anixart.tv/release/${releaseId}${token ? `?token=${token}` : ''}`; try { const response = await axios.get(url); - const releaseData = response.data; + const release = response.data.release; - if (!releaseData.release) { - releaseData.release = {}; - } + if (!release) return { code: 1, release: null }; - // Применяем кастомный note, если он есть - const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId)); - if (noteEntry) { - releaseData.release.note = noteEntry.note; - } + const title = release.title_original || release.title_ru || ''; + const shikiNote = await getShikimoriData(title); + const anixNote = release.note ? `Примечание от Anixart:
${release.note}
` : ''; - return releaseData; - } catch { - return { - code: 2, - release: null, - }; + release.note = `${anixNote}${shikiNote || ''}`; + return { code: 0, release }; + } catch (e) { + console.error('Anixart API error:', e.message); + return { code: 2, release: null }; } }