diff --git a/src/api/api.js b/src/api/api.js index ad7e2ac..e557973 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -17,7 +17,8 @@ const { structureThemes, videoServersJK, getThemes, - getRelatedAnimes + getRelatedAnimesFLV, + getRelatedAnimesMAL } = require('../utils/index'); const ThemeParser = require('../utils/animetheme'); @@ -224,18 +225,34 @@ const getMoreInfo = async (title) =>{ let data = JSON.parse(JSON.stringify(require('../assets/directory.json'))); let result = data.filter(anime => fuzzball.ratio(anime.title, title) > 90)[0]; - return { - title: result.title || null, - poster: result.poster || null, - synopsis: result.description || null, - status: result.state || null, - type: result.type || null, - rating: result.score || null, - genres: result.genres || null, - moreInfo: await animeExtraInfo(result.mal_id).then(info => info || null), - promo: await getAnimeVideoPromo(result.mal_id).then(promo => promo || null), - characters: await getAnimeCharacters(result.mal_id).then(characters => characters || null), - related: await getRelatedAnimes(result.id) + if (!result.jkanime) { + return { + title: result.title || null, + poster: result.poster || null, + synopsis: result.description || null, + status: result.state || null, + type: result.type || null, + rating: result.score || null, + genres: result.genres || null, + moreInfo: await animeExtraInfo(result.mal_id).then(info => info || null), + promo: await getAnimeVideoPromo(result.mal_id).then(promo => promo || null), + characters: await getAnimeCharacters(result.mal_id).then(characters => characters || null), + related: await getRelatedAnimesFLV(result.id) + }; + }else { + return { + title: result.title || null, + poster: result.poster || null, + synopsis: result.description || null, + status: result.state || null, + type: result.type || null, + rating: result.score || null, + genres: result.genres || null, + moreInfo: await animeExtraInfo(result.mal_id).then(info => info || null), + promo: await getAnimeVideoPromo(result.mal_id).then(promo => promo || null), + characters: await getAnimeCharacters(result.mal_id).then(characters => characters || null), + related: await getRelatedAnimesMAL(result.mal_id) + }; } } catch (e) { console.log(e); @@ -245,7 +262,7 @@ const getMoreInfo = async (title) =>{ const getEpisodes = async (title) =>{ try { let data = JSON.parse(JSON.stringify(require('../assets/directory.json'))); - const result = data.filter(x => x.title === title || x.mal_title === title)[0]; + const result = data.filter(x => x.title === title)[0]; if (!result.jkanime) { return await animeflvInfo(result.id).then(episodes => episodes || null); @@ -536,6 +553,5 @@ module.exports = { getPlatforms, getSectionYoutubeVideos, getProfilePlatform, - getRelatedAnimes, getRandomAnime }; diff --git a/src/assets/directory.json b/src/assets/directory.json index 4d4bdf7..036db25 100644 --- a/src/assets/directory.json +++ b/src/assets/directory.json @@ -40879,7 +40879,7 @@ { "id": "rezero-kara-hajimeru-isekai-seikatsu", "title": "Re:Zero kara Hajimeru Isekai Seikatsu", - "mal_id": 36286, + "mal_id": 31240, "poster": "https://aruppi.jeluchu.xyz/res/directory/2385.jpg", "type": "Anime", "genres": [ diff --git a/src/utils/index.js b/src/utils/index.js index f790efb..eb57268 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -136,22 +136,36 @@ const jkanimeInfo = async (id) => { }; -function getPosterAndType(id) { +function getPosterAndType(id, mal_id) { let data = JSON.parse(JSON.stringify(require('../assets/directory.json'))); - for (let anime of data) { - if (anime.id === id) { - return [ - anime.poster, - anime.type - ]; + if (id) { + for (let anime of data) { + if (anime.id === id) { + return [ + anime.poster, + anime.type + ]; + } + } + } + + if (mal_id) { + for (let anime of data) { + if (anime.mal_id === parseInt(mal_id)) { + return [ + anime.poster, + anime.type, + anime.id + ]; + } } } return ""; -}; +} -async function getRelatedAnimes(id) { +async function getRelatedAnimesFLV(id) { const $ = await homgot(`${BASE_ANIMEFLV}/anime/${id}`, { scrapy: true }); let listRelated = {}; let relatedAnimes = []; @@ -162,7 +176,7 @@ async function getRelatedAnimes(id) { }); for (related in listRelated) { - let posterUrl = getPosterAndType(listRelated[related].split('/')[2]); + let posterUrl = getPosterAndType(listRelated[related].split('/')[2], false); relatedAnimes.push( { @@ -178,7 +192,41 @@ async function getRelatedAnimes(id) { }else { return []; } -}; +} + +async function getRelatedAnimesMAL(mal_id) { + const $ = await homgot(`https://myanimelist.net/anime/${mal_id}`, { scrapy: true }); + + let listRelated = {}; + let relatedAnimes = []; + + if ($('table.anime_detail_related_anime').length > 0) { + $('table.anime_detail_related_anime').find('tbody tr').each((index, element) => { + if ($(element).find('td').eq(0) !== 'Adaptation:') { + listRelated[$(element).find('td').eq(1).text()] = $(element).find('td').children('a').attr('href'); + } + }); + + for (related in listRelated) { + let posterUrl = getPosterAndType(false, listRelated[related].split('/')[2]); + + if (posterUrl !== "") { + relatedAnimes.push( + { + id: posterUrl[2], + title: related, + type: posterUrl[1], + poster: posterUrl[0] + } + ); + } + } + + return relatedAnimes; + }else { + return []; + } +} const animeflvGenres = async (id) => { let $ = await homgot(`${BASE_ANIMEFLV}/${id}`, { scrapy: true }); @@ -256,7 +304,7 @@ const getAnimeCharacters = async(mal_id) =>{ }catch(error) { console.log(error); } - + if(data !== null) { return data.characters.map(doc => ({ id: doc.mal_id, @@ -286,7 +334,7 @@ const getAnimeVideoPromo = async(mal_id) =>{ }; const animeExtraInfo = async (mal_id) => { - const data = await homgot(`${BASE_JIKAN}anime/${mal_id}`, {parse: true}); + const data = await homgot(`${BASE_JIKAN}anime/${mal_id}`, { parse: true }); try { @@ -491,7 +539,8 @@ module.exports = { animeflvInfo, getAnimeCharacters, getAnimeVideoPromo, - getRelatedAnimes, + getRelatedAnimesFLV, + getRelatedAnimesMAL, animeExtraInfo, imageUrlToBase64, searchAnime,