Update release.js
This commit is contained in:
@@ -1,98 +1,10 @@
|
||||
const axios = require('axios');
|
||||
|
||||
// Кэш кастомных заметок
|
||||
let cachedNotes = [];
|
||||
|
||||
// Функция для загрузки заметок из внешнего API (Anixart)
|
||||
async function fetchNotes() {
|
||||
try {
|
||||
const response = await axios.get('https://anixart.seele.su/api/release_note', { timeout: 5000 });
|
||||
cachedNotes = Array.isArray(response.data) && response.data.every(item => typeof item.id === 'number' && typeof item.note === 'string')
|
||||
? response.data
|
||||
: [];
|
||||
} catch (error) {
|
||||
cachedNotes = [];
|
||||
}
|
||||
}
|
||||
|
||||
// Загружаем заметки сразу при запуске
|
||||
fetchNotes();
|
||||
|
||||
// Обновляем заметки каждые 10 минут
|
||||
async function scheduleFetchNotes() {
|
||||
await fetchNotes();
|
||||
setTimeout(scheduleFetchNotes, 10 * 60 * 1000);
|
||||
}
|
||||
scheduleFetchNotes();
|
||||
|
||||
// Функция для поиска аниме в Shikimori по названию
|
||||
async function searchShikimoriAnime(titleOriginal, titleRu, year) {
|
||||
try {
|
||||
let searchQuery = titleOriginal || titleRu;
|
||||
if (!searchQuery) return null;
|
||||
|
||||
const response = await axios.get('https://shikimori.one/api/animes', {
|
||||
params: {
|
||||
search: encodeURIComponent(searchQuery),
|
||||
limit: 1,
|
||||
year: year || undefined,
|
||||
},
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
||||
},
|
||||
timeout: 5000,
|
||||
});
|
||||
|
||||
let anime = response.data[0] || null;
|
||||
|
||||
if (!anime && titleRu && titleRu !== titleOriginal) {
|
||||
const responseRu = await axios.get('https://shikimori.one/api/animes', {
|
||||
params: {
|
||||
search: encodeURIComponent(titleRu),
|
||||
limit: 1,
|
||||
year: year || undefined,
|
||||
},
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
||||
},
|
||||
timeout: 5000,
|
||||
});
|
||||
anime = responseRu.data[0] || null;
|
||||
}
|
||||
|
||||
return anime;
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Функция для получения данных о персонажах с Shikimori
|
||||
async function fetchShikimoriCharacters(animeId) {
|
||||
try {
|
||||
const response = await axios.get(`https://shikimori.one/api/animes/${animeId}/roles`, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
||||
},
|
||||
timeout: 5000,
|
||||
});
|
||||
|
||||
const characters = response.data
|
||||
.filter(role => role.roles.includes('Main')) // Фильтр по "Main"
|
||||
.map(role => role.character)
|
||||
.filter(char => char && char.name && char.url)
|
||||
.slice(0, 3);
|
||||
|
||||
return characters;
|
||||
} catch (error) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Основная функция-парсер
|
||||
async function getReleaseFromAnixart(releaseId, token = '') {
|
||||
const url = `https://api.anixart.tv/release/${releaseId}${token ? `?token=${token}` : ''}`;
|
||||
|
||||
try {
|
||||
// Запрос к API Anixart
|
||||
const response = await axios.get(url, { timeout: 5000 });
|
||||
const releaseData = response.data;
|
||||
|
||||
@@ -100,44 +12,65 @@ async function getReleaseFromAnixart(releaseId, token = '') {
|
||||
releaseData.release = {};
|
||||
}
|
||||
|
||||
// Находим оригинальный note от Anixart
|
||||
const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId));
|
||||
const originalNote = noteEntry ? noteEntry.note : '';
|
||||
|
||||
// Извлекаем данные для поиска
|
||||
// Извлекаем оригинальное примечание и название
|
||||
const originalNote = releaseData.release.note || '';
|
||||
const titleOriginal = releaseData.release.title_original || '';
|
||||
const titleRu = releaseData.release.title_ru || '';
|
||||
const year = releaseData.release.year || '';
|
||||
|
||||
// Ищем аниме в Shikimori
|
||||
const shikimoriAnime = await searchShikimoriAnime(titleOriginal, titleRu, year);
|
||||
// Инициализируем note
|
||||
let noteContent = '';
|
||||
|
||||
if (originalNote) {
|
||||
noteContent += `<b>Примечание от Anixart:</b><br>${originalNote}<br>`;
|
||||
}
|
||||
|
||||
// Поиск аниме в Shikimori
|
||||
let shikimoriScore = 'N/A';
|
||||
let characters = [];
|
||||
let mainCharacters = [];
|
||||
|
||||
if (shikimoriAnime) {
|
||||
shikimoriScore = shikimoriAnime.score || 'N/A';
|
||||
characters = await fetchShikimoriCharacters(shikimoriAnime.id);
|
||||
}
|
||||
|
||||
// Формируем новый note
|
||||
let newNote = originalNote ? `<b>Примечание от Anixart:</b><br>${originalNote}<br>` : '';
|
||||
|
||||
// Добавляем оценку Shikimori
|
||||
if (shikimoriAnime && shikimoriScore !== 'N/A') {
|
||||
newNote += `${newNote ? '<br>' : ''}<b>Оценка Shikimori:</b> ${shikimoriScore}<br>`;
|
||||
}
|
||||
|
||||
// Добавляем главных персонажей
|
||||
if (characters.length > 0) {
|
||||
newNote += `${newNote ? '<br>' : ''}<b>Главные персонажи:</b><br>`;
|
||||
characters.forEach(char => {
|
||||
const fullUrl = `https://shikimori.one${char.url}`; // Делаем ссылку полной
|
||||
newNote += `<a href="${fullUrl}">${char.name}</a><br>`;
|
||||
if (titleOriginal) {
|
||||
const shikimoriResponse = await axios.get('https://shikimori.one/api/animes', {
|
||||
params: {
|
||||
search: encodeURIComponent(titleOriginal),
|
||||
limit: 1,
|
||||
},
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
||||
},
|
||||
timeout: 5000,
|
||||
});
|
||||
|
||||
const shikimoriAnime = shikimoriResponse.data[0];
|
||||
if (shikimoriAnime) {
|
||||
shikimoriScore = shikimoriAnime.score || 'N/A';
|
||||
|
||||
// Получаем персонажей
|
||||
const rolesResponse = await axios.get(`https://shikimori.one/api/animes/${shikimoriAnime.id}/roles`, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
||||
},
|
||||
timeout: 5000,
|
||||
});
|
||||
|
||||
mainCharacters = rolesResponse.data
|
||||
.filter(role => role.roles.includes('Main'))
|
||||
.map(role => role.character)
|
||||
.filter(char => char && char.name && char.url)
|
||||
.slice(0, 3)
|
||||
.map(char => char.name); // Берем только имена
|
||||
}
|
||||
}
|
||||
|
||||
// Применяем note, если есть данные, иначе оставляем пустую строку
|
||||
releaseData.release.note = newNote || '';
|
||||
// Формируем note
|
||||
if (shikimoriScore !== 'N/A' || mainCharacters.length > 0) {
|
||||
noteContent += `<b>Оценки из Shikimori:</b> ${shikimoriScore}<br>`;
|
||||
}
|
||||
|
||||
if (mainCharacters.length > 0) {
|
||||
noteContent += `<b>Главные персонажи:</b> ${mainCharacters.join(', ')}<br>`;
|
||||
}
|
||||
|
||||
// Применяем note, если есть что добавить
|
||||
releaseData.release.note = noteContent || '';
|
||||
|
||||
return releaseData;
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user