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
>

@ -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": {

@ -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: [
{

@ -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;
}
};

Loading…
Cancel
Save