diff --git a/src/api/api.js b/src/api/api.js index e97827f..14ca942 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -7,7 +7,8 @@ const { imageUrlToBase64, getAnimeCharacters, getAnimeVideoPromo, - animeExtraInfo + animeExtraInfo, + searchAnime } = require('../utils/index'); const { @@ -355,6 +356,10 @@ const getAnimeServers = async (id) => { }; +const search = async (title) =>{ + return await searchAnime(title); +}; + module.exports = { schedule, top, @@ -368,5 +373,6 @@ module.exports = { getSpecials, getTv, getMoreInfo, - getAnimeServers + getAnimeServers, + search }; diff --git a/src/api/index.js b/src/api/index.js index be19197..af3d2db 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -23,7 +23,8 @@ router.get('/', (req, res) => { 'Specials': '/api/v2/specials/:type/:page', 'Tv': '/api/v2/tv/:type/:page', 'MoreInfo': '/api/v2/moreInfo/:title', - 'GetAnimeServers': '/api/v2/getAnimeServers/:id' + 'GetAnimeServers': '/api/v2/getAnimeServers/:id', + 'Search': '/api/v2/search/:title' } ] }); diff --git a/src/api/routes/index.js b/src/api/routes/index.js index 73e6a9c..57be567 100644 --- a/src/api/routes/index.js +++ b/src/api/routes/index.js @@ -176,7 +176,7 @@ router.get('/moreInfo/:title' , (req, res) =>{ res.status(200).json({ info }); - } + } else { res.status(404) } }).catch((err) =>{ console.error(err); }); @@ -198,4 +198,19 @@ router.get('/getAnimeServers/:id([^/]+/[^/]+)' , (req, res) =>{ }); +router.get('/search/:title' , (req, res) =>{ + + let title = req.params.title; + + api.search(title) + .then(search =>{ + res.status(200).json({ + search + }); + }).catch((err) =>{ + console.error(err); + }); + +}); + module.exports = router; diff --git a/src/utils/index.js b/src/utils/index.js index dd8e763..ace05d1 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -3,7 +3,7 @@ const cheerio = require('cheerio'); const base64 = require('node-base64-image'); const { - BASE_ANIMEFLV, BASE_JIKAN, BASE_EPISODE_IMG_URL + BASE_ANIMEFLV, BASE_JIKAN, BASE_EPISODE_IMG_URL, SEARCH_URL } = require('../api/urls'); const animeflvInfo = async(id) =>{ @@ -239,15 +239,32 @@ const imageUrlToBase64 = async(url) => { return await base64.encode(url, {string:true}); }; -/*const imageUrlToBase64 = async(url) => { - let res = await cloudscraper({ - url, - method: "GET", - encoding: null - }); +const search = async() =>{ } + +const searchAnime = async(query) => { + + const res = await cloudscraper(`${SEARCH_URL}${query}`); + const body = await res; + const $ = cheerio.load(body); + const promises = []; + + $('div.Container ul.ListAnimes li article').each((index , element) =>{ + const $element = $(element); + const id = $element.find('div.Description a.Button').attr('href').slice(1); + const title = $element.find('a h3').text(); + let poster = $element.find('a div.Image figure img').attr('src') || $element.find('a div.Image figure img').attr('data-cfsrc'); + + promises.push(search().then(async extra => ({ + id: id || null, + title: title || null, + image: await imageUrlToBase64(poster) || null + }))); - return Buffer.from(res).toString("base64"); -};*/ + }) + + return Promise.all(promises); + +}; const MergeRecursive = (obj1 , obj2) => { for(var p in obj2) { @@ -282,6 +299,7 @@ module.exports = { getAnimeVideoPromo, animeExtraInfo, imageUrlToBase64, + searchAnime, MergeRecursive, urlify } \ No newline at end of file