Reimplemented getRelatedAnimesMAL

Reimplemented getRelatedAnimesMAL using jikan v4 and aruppi DB
what a pain in the ass was this one...
v4
Darkangeel_hd 2 years ago
parent 3a633b2ff2
commit 58ac761098

@ -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 > This API has everything about Japan, from anime, music, radio, images, videos ... to japanese culture
> >

@ -1,6 +1,6 @@
{ {
"name": "aruppi", "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", "description": "Aruppi is a custom API to obtain data from the Japanese culture for the mobile app",
"main": "./src/api/api.ts", "main": "./src/api/api.ts",
"scripts": { "scripts": {

@ -26,7 +26,7 @@ routes.get('/api/v4/', (req: Request, res: Response) => {
res.json({ res.json({
message: 'Aruppi /api - 🎏', message: 'Aruppi /api - 🎏',
author: 'Jéluchu', author: 'Jéluchu',
version: '4.2.1', version: '4.2.2',
credits: 'The bitch loves /apis that offers data to Aruppi App', credits: 'The bitch loves /apis that offers data to Aruppi App',
entries: [ entries: [
{ {

@ -4,6 +4,7 @@ import AnimeModel, {Anime} from '../database/models/anime.model';
import crypto from 'crypto'; import crypto from 'crypto';
import util from 'util'; import util from 'util';
import {redisClient} from '../database/connection'; import {redisClient} from '../database/connection';
import { stderr } from 'process';
// @ts-ignore // @ts-ignore
redisClient.get = util.promisify(redisClient.get); redisClient.get = util.promisify(redisClient.get);
@ -262,12 +263,12 @@ const getPosterAndType = async (
}; };
export const getRelatedAnimesMAL = async (mal_id: number) => { export const getRelatedAnimesMAL = async (mal_id: number) => {
let $: cheerio.Root; let info: any;
try { try {
if (redisClient.connected) { if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get( const resultQueryRedis: any = await redisClient.get(
`getRelatedMAL_${hashStringMd5(`${mal_id}`)}`, `getRelatedMAL_${mal_id}`,
); );
if (resultQueryRedis) { if (resultQueryRedis) {
@ -277,66 +278,52 @@ export const getRelatedAnimesMAL = async (mal_id: number) => {
} }
} }
$ = await requestGot(`https://myanimelist.net/anime/${mal_id}`, { info = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}/relations`, {
parse: false, parse: true,
scrapy: true, scrapy: false,
spoof: true,
}); });
} catch (err) { } catch (err) {
stderr.write(`Error on getRelatedAnimesMAL http on mal_id: ${mal_id}\n`)
return err; return err;
} }
let listRelated: any = {}; const relatedAnimes = []
let relatedAnimes: RelatedAnime[] = []; for (const relation_entry of info.data) {
for (const entry of relation_entry.entry){
if ($('table.anime_detail_related_anime').length > 0) { if (entry.type != "anime")
$('table.anime_detail_related_anime') break;
.find('tbody tr') const queryRes: Anime | null = await AnimeModel.findOne({
.each((index: number, element: any) => { mal_id: {$eq: entry.mal_id}
if ($(element).find('td').eq(0).text() !== 'Adaptation:') {
listRelated[$(element).find('td').eq(1).text()] = $(element)
.find('td')
.children('a')
.attr('href');
}
}); });
if (queryRes == null)
for (const related in listRelated) { break
let posterUrl: any = await getPosterAndType(
undefined, relatedAnimes.push({
listRelated[related].split('/')[2], title: queryRes!.title,
); type: queryRes?.type,
poster: queryRes?.poster
if (posterUrl !== '') { })
relatedAnimes.push({
title: related,
type: posterUrl[1],
poster: posterUrl[0],
});
}
} }
}
if (relatedAnimes.length > 0) { if (relatedAnimes.length > 0) {
if (redisClient.connected) { if (redisClient.connected) {
/* Set the key in the redis cache. */ /* Set the key in the redis cache. */
redisClient.set(
`getRelatedMAL_${hashStringMd5(`${mal_id}`)}`,
JSON.stringify(relatedAnimes),
);
/* After 24hrs expire the key. */ redisClient.set(
`getRelatedMAL_${mal_id}`,
JSON.stringify(relatedAnimes),
);
redisClient.expireat( /* After 2hrs expire the key. */
`getRelatedMAL_${hashStringMd5(`${mal_id}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return relatedAnimes; redisClient.expire(
`getRelatedMAL_${mal_id}`,
7200,
);
} }
} else {
return []; return relatedAnimes;
} }
}; };

Loading…
Cancel
Save