From 8155044a5e8e7217818fb41c19f2172d0d4dd272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=BC=E3=83=BC=E3=83=AC?= Date: Wed, 21 May 2025 18:35:15 +0500 Subject: [PATCH] Update release.ts --- api/v1/src/release.ts | 55 ++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/api/v1/src/release.ts b/api/v1/src/release.ts index e63ef95..6a42920 100644 --- a/api/v1/src/release.ts +++ b/api/v1/src/release.ts @@ -5,7 +5,7 @@ const baseHeaders = { "Accept": "application/json", }; -// Взвешенное среднее из rates_scores_stats +// Функция для расчёта рейтинга из rates_scores_stats function calculateWeightedScore(stats) { if (!stats?.length) return null; @@ -22,7 +22,7 @@ function calculateWeightedScore(stats) { return count ? (total / count).toFixed(2) : null; } -// Получение данных с Shikimori +// Получаем данные Shikimori async function getShikimoriData(search, year) { if (!search) { return { weightedScore: "N/A", characters: [] }; @@ -39,13 +39,13 @@ async function getShikimoriData(search, year) { return { weightedScore: "N/A", characters: [] }; } - // Взвешенный рейтинг из rates_scores_stats + // Получаем рейтинг из rates_scores_stats const statsUrl = `https://shikimori.one/api/animes/${anime.id}`; const statsRes = await fetch(statsUrl, { headers: baseHeaders }); const statsData = await statsRes.json(); const weightedScore = calculateWeightedScore(statsData.rates_scores_stats) || "N/A"; - // Главные персонажи + // Получаем главных персонажей const rolesUrl = `https://shikimori.one/api/animes/${anime.id}/roles`; const rolesRes = await fetch(rolesUrl, { headers: baseHeaders }); const roles = await rolesRes.json(); @@ -67,7 +67,7 @@ async function getShikimoriData(search, year) { } } -// Рейтинг с MyAnimeList через Jikan +// Получаем рейтинг MyAnimeList через Jikan async function getMALScore(title) { const url = `https://api.jikan.moe/v4/anime?q=${encodeURIComponent(title)}&limit=1`; @@ -86,7 +86,7 @@ async function getMALScore(title) { } } -// Получение и сборка данных о релизе +// Основная функция получения релиза и формирования примечания async function getReleaseFromAnixart(releaseId, token = "") { const url = `https://api.anixart.tv/release/${releaseId}${token ? `?token=${token}` : ""}`; @@ -101,49 +101,46 @@ async function getReleaseFromAnixart(releaseId, token = "") { const title = release.title_original || release.title_ru || ""; const year = release.year || ""; - let noteExtra = ""; try { const shikiData = await getShikimoriData(title, year); - const shikiWeighted = shikiData.weightedScore || "N/A"; + const shikiScore = shikiData.weightedScore !== "N/A" ? `Рейтинг Shikimori: ${shikiData.weightedScore}★` : ""; + const malScoreRaw = await getMALScore(title); + const malScore = malScoreRaw !== "N/A" ? `Рейтинг MyAnimeList: ${malScoreRaw}` : ""; const characters = shikiData.characters.length - ? shikiData.characters.map((c) => `${c.name}`).join(", ") - : "N/A"; + ? `Главные персонажи: ` + shikiData.characters.map(c => `${c.name}`).join(", ") + : ""; - const malScore = await getMALScore(title); + // Собираем рейтинг и персонажей, фильтруя пустые строки + const ratingParts = [shikiScore, malScore].filter(Boolean).join("
"); + const charsPart = characters ? characters : ""; + + // Примечание от Anixart (без лишних br если пустое) + const originalNote = release.note?.trim(); + + let finalNote = ""; + if (ratingParts) finalNote += ratingParts; + if (charsPart) finalNote += (finalNote ? "
" : "") + charsPart; + if (originalNote) finalNote += (finalNote ? "

" : "") + `Примечание от Anixart:
${originalNote}`; + + release.note = finalNote || null; - noteExtra = - `Shikimori (взвешенный): ${shikiWeighted}
` + - `MyAnimeList: ${malScore}
` + - `Главные персонажи: ${characters}
`; } catch { - noteExtra = - `Shikimori (взвешенный): N/A
` + - `MyAnimeList: N/A
` + - `Главные персонажи: N/A
`; + release.note = null; } - const originalNote = release.note?.trim(); - let finalNote = noteExtra; - if (originalNote) { - finalNote += `
Примечание от Anixart:
${originalNote}`; - } - - release.note = finalNote; - return { code: 0, release }; } catch { return { code: 2, release: null }; } } -// Серверный роутинг +// HTTP сервер serve(async (req) => { const url = new URL(req.url); const path = url.pathname; const token = url.searchParams.get("token"); - // /api/release/{releaseId} const releaseMatch = path.match(/^\/api\/release\/([^\/]+)/); if (releaseMatch) { const releaseId = releaseMatch[1];