diff --git a/README.md b/README.md index 1fb2e6d..4c22d0c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# **Aruppi API** (v4.2.1) +# **Aruppi API** (v4.2.2) > This API has everything about Japan, from anime, music, radio, images, videos ... to japanese culture > diff --git a/package.json b/package.json index 72a7b13..31e6c2d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aruppi", - "version": "4.2.1", + "version": "4.2.2", "description": "Aruppi is a custom API to obtain data from the Japanese culture for the mobile app", "main": "./src/api/api.ts", "scripts": { diff --git a/src/routes.ts b/src/routes.ts index a32361b..cb6d6fd 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -26,7 +26,7 @@ routes.get('/api/v4/', (req: Request, res: Response) => { res.json({ message: 'Aruppi /api - 🎏', author: 'Jéluchu', - version: '4.2.1', + version: '4.2.2', credits: 'The bitch loves /apis that offers data to Aruppi App', entries: [ { diff --git a/src/utils/util.ts b/src/utils/util.ts index 8266606..3bccc9f 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -4,6 +4,7 @@ import AnimeModel, {Anime} from '../database/models/anime.model'; import crypto from 'crypto'; import util from 'util'; import {redisClient} from '../database/connection'; +import { stderr } from 'process'; // @ts-ignore redisClient.get = util.promisify(redisClient.get); @@ -262,12 +263,12 @@ const getPosterAndType = async ( }; export const getRelatedAnimesMAL = async (mal_id: number) => { - let $: cheerio.Root; + let info: any; try { if (redisClient.connected) { const resultQueryRedis: any = await redisClient.get( - `getRelatedMAL_${hashStringMd5(`${mal_id}`)}`, + `getRelatedMAL_${mal_id}`, ); if (resultQueryRedis) { @@ -277,66 +278,52 @@ export const getRelatedAnimesMAL = async (mal_id: number) => { } } - $ = await requestGot(`https://myanimelist.net/anime/${mal_id}`, { - parse: false, - scrapy: true, - spoof: true, + info = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}/relations`, { + parse: true, + scrapy: false, }); } catch (err) { + stderr.write(`Error on getRelatedAnimesMAL http on mal_id: ${mal_id}\n`) return err; } - let listRelated: any = {}; - let relatedAnimes: RelatedAnime[] = []; - - if ($('table.anime_detail_related_anime').length > 0) { - $('table.anime_detail_related_anime') - .find('tbody tr') - .each((index: number, element: any) => { - if ($(element).find('td').eq(0).text() !== 'Adaptation:') { - listRelated[$(element).find('td').eq(1).text()] = $(element) - .find('td') - .children('a') - .attr('href'); - } + const relatedAnimes = [] + for (const relation_entry of info.data) { + for (const entry of relation_entry.entry){ + if (entry.type != "anime") + break; + const queryRes: Anime | null = await AnimeModel.findOne({ + mal_id: {$eq: entry.mal_id} }); - - for (const related in listRelated) { - let posterUrl: any = await getPosterAndType( - undefined, - listRelated[related].split('/')[2], - ); - - if (posterUrl !== '') { - relatedAnimes.push({ - title: related, - type: posterUrl[1], - poster: posterUrl[0], - }); - } + if (queryRes == null) + break + + relatedAnimes.push({ + title: queryRes!.title, + type: queryRes?.type, + poster: queryRes?.poster + }) } + } - if (relatedAnimes.length > 0) { - if (redisClient.connected) { - /* Set the key in the redis cache. */ - - redisClient.set( - `getRelatedMAL_${hashStringMd5(`${mal_id}`)}`, - JSON.stringify(relatedAnimes), - ); + if (relatedAnimes.length > 0) { + if (redisClient.connected) { + /* Set the key in the redis cache. */ - /* After 24hrs expire the key. */ + redisClient.set( + `getRelatedMAL_${mal_id}`, + JSON.stringify(relatedAnimes), + ); - redisClient.expireat( - `getRelatedMAL_${hashStringMd5(`${mal_id}`)}`, - parseInt(`${+new Date() / 1000}`, 10) + 7200, - ); - } + /* After 2hrs expire the key. */ - return relatedAnimes; + redisClient.expire( + `getRelatedMAL_${mal_id}`, + 7200, + ); } - } else { - return []; + + return relatedAnimes; } };