Update release.js
This commit is contained in:
@@ -1,98 +1,10 @@
|
|||||||
const axios = require('axios');
|
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 = '') {
|
async function getReleaseFromAnixart(releaseId, token = '') {
|
||||||
const url = `https://api.anixart.tv/release/${releaseId}${token ? `?token=${token}` : ''}`;
|
const url = `https://api.anixart.tv/release/${releaseId}${token ? `?token=${token}` : ''}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Запрос к API Anixart
|
||||||
const response = await axios.get(url, { timeout: 5000 });
|
const response = await axios.get(url, { timeout: 5000 });
|
||||||
const releaseData = response.data;
|
const releaseData = response.data;
|
||||||
|
|
||||||
@@ -100,44 +12,65 @@ async function getReleaseFromAnixart(releaseId, token = '') {
|
|||||||
releaseData.release = {};
|
releaseData.release = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Находим оригинальный note от Anixart
|
// Извлекаем оригинальное примечание и название
|
||||||
const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId));
|
const originalNote = releaseData.release.note || '';
|
||||||
const originalNote = noteEntry ? noteEntry.note : '';
|
|
||||||
|
|
||||||
// Извлекаем данные для поиска
|
|
||||||
const titleOriginal = releaseData.release.title_original || '';
|
const titleOriginal = releaseData.release.title_original || '';
|
||||||
const titleRu = releaseData.release.title_ru || '';
|
|
||||||
const year = releaseData.release.year || '';
|
|
||||||
|
|
||||||
// Ищем аниме в Shikimori
|
// Инициализируем note
|
||||||
const shikimoriAnime = await searchShikimoriAnime(titleOriginal, titleRu, year);
|
let noteContent = '';
|
||||||
|
|
||||||
|
if (originalNote) {
|
||||||
|
noteContent += `<b>Примечание от Anixart:</b><br>${originalNote}<br>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Поиск аниме в Shikimori
|
||||||
let shikimoriScore = 'N/A';
|
let shikimoriScore = 'N/A';
|
||||||
let characters = [];
|
let mainCharacters = [];
|
||||||
|
|
||||||
|
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) {
|
if (shikimoriAnime) {
|
||||||
shikimoriScore = shikimoriAnime.score || 'N/A';
|
shikimoriScore = shikimoriAnime.score || 'N/A';
|
||||||
characters = await fetchShikimoriCharacters(shikimoriAnime.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Формируем новый note
|
// Получаем персонажей
|
||||||
let newNote = originalNote ? `<b>Примечание от Anixart:</b><br>${originalNote}<br>` : '';
|
const rolesResponse = await axios.get(`https://shikimori.one/api/animes/${shikimoriAnime.id}/roles`, {
|
||||||
|
headers: {
|
||||||
// Добавляем оценку Shikimori
|
'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',
|
||||||
if (shikimoriAnime && shikimoriScore !== 'N/A') {
|
},
|
||||||
newNote += `${newNote ? '<br>' : ''}<b>Оценка Shikimori:</b> ${shikimoriScore}<br>`;
|
timeout: 5000,
|
||||||
}
|
|
||||||
|
|
||||||
// Добавляем главных персонажей
|
|
||||||
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>`;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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, если есть данные, иначе оставляем пустую строку
|
// Формируем note
|
||||||
releaseData.release.note = newNote || '';
|
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;
|
return releaseData;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user