Update release.js

This commit is contained in:
2025-05-12 13:20:08 +05:00
committed by GitHub
parent 48c256545b
commit fb98e67a89

View File

@@ -26,34 +26,42 @@ async function scheduleFetchNotes() {
} }
scheduleFetchNotes(); scheduleFetchNotes();
// Функция для получения данных с Shikimori // Функция для поиска аниме в Shikimori по названию
async function fetchShikimoriData(animeId) { async function searchShikimoriAnime(titleRu, titleEn) {
try { try {
const response = await axios.get(`https://shikimori.one/api/animes/${animeId}`, { timeout: 5000 }); const searchQuery = titleRu || titleEn; // Используем русское название, если есть, иначе английское
const data = response.data; if (!searchQuery) return null;
return {
score: data.score || 'N/A', const response = await axios.get('https://shikimori.one/api/animes', {
characters: data.characters || [], // Персонажи (нужны главные) params: {
}; search: searchQuery,
limit: 1, // Берем только первое совпадение
},
timeout: 5000,
});
const anime = response.data[0];
if (!anime) return null;
return anime;
} catch (error) { } catch (error) {
console.error('Ошибка при запросе к Shikimori:', error.message); console.error('Ошибка при поиске аниме в Shikimori:', error.message);
return { score: 'N/A', characters: [] }; return null;
} }
} }
// Функция для получения данных с MyAnimeList // Функция для получения данных о персонажах с Shikimori
async function fetchMyAnimeListData(animeId) { async function fetchShikimoriCharacters(animeId) {
try { try {
// Для MyAnimeList нужен API-ключ, здесь предполагается, что у тебя есть доступ. const response = await axios.get(`https://shikimori.one/api/animes/${animeId}/roles`, { timeout: 5000 });
// Используем публичный API (примерный формат). const characters = response.data
const response = await axios.get(`https://api.myanimelist.net/v2/anime/${animeId}?fields=mean`, { .filter(role => role.roles.includes('Main')) // Берем только главных персонажей
headers: { Authorization: 'Bearer YOUR_MAL_TOKEN' }, .map(role => role.character)
timeout: 5000, .filter(char => char && char.name && char.url);
}); return characters.slice(0, 3); // Ограничиваем до 3 персонажей
return response.data.mean || 'N/A';
} catch (error) { } catch (error) {
console.error('Ошибка при запросе к MyAnimeList:', error.message); console.error('Ошибка при запросе персонажей из Shikimori:', error.message);
return 'N/A'; return [];
} }
} }
@@ -73,37 +81,45 @@ async function getReleaseFromAnixart(releaseId, token = '') {
const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId)); const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId));
const originalNote = noteEntry ? noteEntry.note : ''; const originalNote = noteEntry ? noteEntry.note : '';
// Предполагаем, что у тебя есть соответствие releaseId (Anixart) и ID на Shikimori/MyAnimeList. // Извлекаем названия релиза (предполагаем, что API Anixart возвращает их в releaseData)
// Это может быть маппинг в базе данных, но для примера я использую тот же releaseId. const titleRu = releaseData.release.name_ru || '';
const shikimoriData = await fetchShikimoriData(releaseId); const titleEn = releaseData.release.name_en || '';
const malScore = await fetchMyAnimeListData(releaseId);
// Ищем аниме в Shikimori по названию
const shikimoriAnime = await searchShikimoriAnime(titleRu, titleEn);
let shikimoriScore = 'N/A';
let characters = [];
if (shikimoriAnime) {
shikimoriScore = shikimoriAnime.score || 'N/A';
characters = await fetchShikimoriCharacters(shikimoriAnime.id);
}
// Формируем новый note // Формируем новый note
let newNote = ''; let newNote = '';
// Добавляем оригинальный note от Anixart, если он есть // Добавляем оригинальный note от Anixart, только если он есть
if (originalNote) { if (originalNote) {
newNote += `<b>Примечание от Anixart:</b><br>${originalNote}<br><br>`; newNote += `<b>Примечание от Anixart:</b><br>${originalNote}<br>`;
} }
// Добавляем оценки // Добавляем оценку Shikimori
newNote += `<b>Оценки:</b><br>`; if (shikimoriScore !== 'N/A') {
newNote += `Shikimori: ${shikimoriData.score}<br>`; newNote += `${newNote ? '<br>' : ''}<b>Оценка Shikimori:</b> ${shikimoriScore}<br>`;
newNote += `MyAnimeList: ${malScore}<br><br>`; }
// Добавляем главных персонажей (берем первые 3, например) // Добавляем главных персонажей
if (shikimoriData.characters.length > 0) { if (characters.length > 0) {
newNote += `<b>Главные персонажи:</b><br>`; newNote += `${newNote ? '<br>' : ''}<b>Главные персонажи:</b><br>`;
const mainCharacters = shikimoriData.characters.slice(0, 3); // Ограничиваем 3 персонажами characters.forEach(char => {
mainCharacters.forEach(char => {
if (char.name && char.url) {
newNote += `<a href="${char.url}">${char.name}</a><br>`; newNote += `<a href="${char.url}">${char.name}</a><br>`;
}
}); });
} }
// Применяем новый note // Применяем новый note, только если есть что добавить
if (newNote) {
releaseData.release.note = newNote; releaseData.release.note = newNote;
}
return releaseData; return releaseData;
} catch (error) { } catch (error) {