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