Update release.js
This commit is contained in:
@@ -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 => {
|
newNote += `<a href="${char.url}">${char.name}</a><br>`;
|
||||||
if (char.name && char.url) {
|
|
||||||
newNote += `<a href="${char.url}">${char.name}</a><br>`;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Применяем новый note
|
// Применяем новый note, только если есть что добавить
|
||||||
releaseData.release.note = newNote;
|
if (newNote) {
|
||||||
|
releaseData.release.note = newNote;
|
||||||
|
}
|
||||||
|
|
||||||
return releaseData;
|
return releaseData;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user