Update release.js
This commit is contained in:
@@ -3,12 +3,15 @@ const axios = require('axios');
|
|||||||
// Кэш кастомных заметок
|
// Кэш кастомных заметок
|
||||||
let cachedNotes = [];
|
let cachedNotes = [];
|
||||||
|
|
||||||
// Функция для загрузки заметок из внешнего API
|
// Функция для загрузки заметок из внешнего API (Anixart)
|
||||||
async function fetchNotes() {
|
async function fetchNotes() {
|
||||||
try {
|
try {
|
||||||
const response = await axios.get('https://anixart.seele.su/api/release_note');
|
const response = await axios.get('https://anixart.seele.su/api/release_note', { timeout: 5000 });
|
||||||
cachedNotes = Array.isArray(response.data) ? response.data : [];
|
cachedNotes = Array.isArray(response.data) && response.data.every(item => typeof item.id === 'number' && typeof item.note === 'string')
|
||||||
} catch {
|
? response.data
|
||||||
|
: [];
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Ошибка при загрузке заметок Anixart:', error.message);
|
||||||
cachedNotes = [];
|
cachedNotes = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,28 +20,94 @@ async function fetchNotes() {
|
|||||||
fetchNotes();
|
fetchNotes();
|
||||||
|
|
||||||
// Обновляем заметки каждые 10 минут
|
// Обновляем заметки каждые 10 минут
|
||||||
setInterval(fetchNotes, 10 * 60 * 1000);
|
async function scheduleFetchNotes() {
|
||||||
|
await fetchNotes();
|
||||||
|
setTimeout(scheduleFetchNotes, 10 * 60 * 1000);
|
||||||
|
}
|
||||||
|
scheduleFetchNotes();
|
||||||
|
|
||||||
|
// Функция для получения данных с Shikimori
|
||||||
|
async function fetchShikimoriData(animeId) {
|
||||||
|
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 || [], // Персонажи (нужны главные)
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Ошибка при запросе к Shikimori:', error.message);
|
||||||
|
return { score: 'N/A', characters: [] };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для получения данных с MyAnimeList
|
||||||
|
async function fetchMyAnimeListData(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';
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Ошибка при запросе к MyAnimeList:', error.message);
|
||||||
|
return 'N/A';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Основная функция-парсер
|
// Основная функция-парсер
|
||||||
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 {
|
||||||
const response = await axios.get(url);
|
const response = await axios.get(url, { timeout: 5000 });
|
||||||
const releaseData = response.data;
|
const releaseData = response.data;
|
||||||
|
|
||||||
if (!releaseData.release) {
|
if (!releaseData.release) {
|
||||||
releaseData.release = {};
|
releaseData.release = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Применяем кастомный note, если он есть
|
// Находим оригинальный note от Anixart
|
||||||
const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId));
|
const noteEntry = cachedNotes.find(entry => entry.id === Number(releaseId));
|
||||||
if (noteEntry) {
|
const originalNote = noteEntry ? noteEntry.note : '';
|
||||||
releaseData.release.note = noteEntry.note;
|
|
||||||
|
// Предполагаем, что у тебя есть соответствие releaseId (Anixart) и ID на Shikimori/MyAnimeList.
|
||||||
|
// Это может быть маппинг в базе данных, но для примера я использую тот же releaseId.
|
||||||
|
const shikimoriData = await fetchShikimoriData(releaseId);
|
||||||
|
const malScore = await fetchMyAnimeListData(releaseId);
|
||||||
|
|
||||||
|
// Формируем новый note
|
||||||
|
let newNote = '';
|
||||||
|
|
||||||
|
// Добавляем оригинальный note от Anixart, если он есть
|
||||||
|
if (originalNote) {
|
||||||
|
newNote += `<b>Примечание от Anixart:</b><br>${originalNote}<br><br>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Добавляем оценки
|
||||||
|
newNote += `<b>Оценки:</b><br>`;
|
||||||
|
newNote += `Shikimori: ${shikimoriData.score}<br>`;
|
||||||
|
newNote += `MyAnimeList: ${malScore}<br><br>`;
|
||||||
|
|
||||||
|
// Добавляем главных персонажей (берем первые 3, например)
|
||||||
|
if (shikimoriData.characters.length > 0) {
|
||||||
|
newNote += `<b>Главные персонажи:</b><br>`;
|
||||||
|
const mainCharacters = shikimoriData.characters.slice(0, 3); // Ограничиваем 3 персонажами
|
||||||
|
mainCharacters.forEach(char => {
|
||||||
|
if (char.name && char.url) {
|
||||||
|
newNote += `<a href="${char.url}">${char.name}</a><br>`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Применяем новый note
|
||||||
|
releaseData.release.note = newNote;
|
||||||
|
|
||||||
return releaseData;
|
return releaseData;
|
||||||
} catch {
|
} catch (error) {
|
||||||
|
console.error('Ошибка при запросе релиза:', error.message);
|
||||||
return {
|
return {
|
||||||
code: 2,
|
code: 2,
|
||||||
release: null,
|
release: null,
|
||||||
|
|||||||
Reference in New Issue
Block a user