Update release.ts
This commit is contained in:
@@ -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) => `<a href="${c.url}">${c.name}</a>`).join(", ")
|
||||
: "N/A";
|
||||
? `<b>Главные персонажи:</b> ` + shikiData.characters.map(c => `<a href="${c.url}">${c.name}</a>`).join(", ")
|
||||
: "";
|
||||
|
||||
const malScore = await getMALScore(title);
|
||||
// Собираем рейтинг и персонажей, фильтруя пустые строки
|
||||
const ratingParts = [shikiScore, malScore].filter(Boolean).join("<br>");
|
||||
const charsPart = characters ? characters : "";
|
||||
|
||||
// Примечание от Anixart (без лишних br если пустое)
|
||||
const originalNote = release.note?.trim();
|
||||
|
||||
let finalNote = "";
|
||||
if (ratingParts) finalNote += ratingParts;
|
||||
if (charsPart) finalNote += (finalNote ? "<br>" : "") + charsPart;
|
||||
if (originalNote) finalNote += (finalNote ? "<br><br>" : "") + `<b>Примечание от Anixart:</b><br>${originalNote}`;
|
||||
|
||||
release.note = finalNote || null;
|
||||
|
||||
noteExtra =
|
||||
`<b>Shikimori (взвешенный):</b> ${shikiWeighted}<br>` +
|
||||
`<b>MyAnimeList:</b> ${malScore}<br>` +
|
||||
`<b>Главные персонажи:</b> ${characters}<br>`;
|
||||
} catch {
|
||||
noteExtra =
|
||||
`<b>Shikimori (взвешенный):</b> N/A<br>` +
|
||||
`<b>MyAnimeList:</b> N/A<br>` +
|
||||
`<b>Главные персонажи:</b> N/A<br>`;
|
||||
release.note = null;
|
||||
}
|
||||
|
||||
const originalNote = release.note?.trim();
|
||||
let finalNote = noteExtra;
|
||||
if (originalNote) {
|
||||
finalNote += `<br><b>Примечание от Anixart:</b><br>${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];
|
||||
|
||||
Reference in New Issue
Block a user