😎 Refactoring the getAnimeServers

Adding the possibility to target another source, if one of them doesn't work, if any source doesn't work at all, just return undefined to the data options.
pull/49/head v4.1.0
capitanwesler 4 years ago
parent 2afd59cf7a
commit 0a60814065

@ -1,4 +1,4 @@
# **Aruppi API** (v4.0.9)
# **Aruppi API** (v4.1.0)
> This API has everything about Japan, from anime, music, radio, images, videos ... to japanese culture
>

@ -1,6 +1,6 @@
{
"name": "aruppi",
"version": "4.0.9",
"version": "4.1.0",
"description": "Aruppi is a custom API to obtain data from the Japanese culture for the mobile app",
"main": "./src/api/api.ts",
"scripts": {

@ -1,5 +1,5 @@
import {NextFunction, Request, Response} from 'express';
import {requestGot} from '../utils/requestCall';
import { NextFunction, Request, Response } from 'express';
import { requestGot } from '../utils/requestCall';
import {
imageUrlToBase64,
jkanimeInfo,
@ -9,10 +9,10 @@ import {
videoServersMonosChinos,
videoServersTioAnime,
} from '../utils/util';
import {transformUrlServer} from '../utils/transformerUrl';
import AnimeModel, {Anime as ModelA} from '../database/models/anime.model';
import { transformUrlServer } from '../utils/transformerUrl';
import AnimeModel, { Anime as ModelA } from '../database/models/anime.model';
import util from 'util';
import {hashStringMd5} from '../utils/util';
import { hashStringMd5 } from '../utils/util';
import {
animeExtraInfo,
getAnimeVideoPromo,
@ -20,7 +20,7 @@ import {
getRelatedAnimesMAL,
} from '../utils/util';
import urls from '../utils/urls';
import {redisClient} from '../database/connection';
import { redisClient } from '../database/connection';
// @ts-ignore
redisClient.get = util.promisify(redisClient.get);
@ -80,7 +80,7 @@ interface Movie {
export default class AnimeController {
async schedule(req: Request, res: Response, next: NextFunction) {
const {day} = req.params;
const { day } = req.params;
let data: any;
try {
@ -116,7 +116,7 @@ export default class AnimeController {
redisClient.set(
`schedule_${hashStringMd5(day)}`,
JSON.stringify({day: animeList}),
JSON.stringify({ day: animeList }),
);
/* After 24hrs expire the key. */
@ -131,12 +131,12 @@ export default class AnimeController {
day: animeList,
});
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async top(req: Request, res: Response, next: NextFunction) {
const {type, subtype, page} = req.params;
const { type, subtype, page } = req.params;
let data: any;
try {
@ -163,7 +163,7 @@ export default class AnimeController {
if (subtype !== undefined) {
data = await requestGot(
`${urls.BASE_JIKAN}top/${type}/${page}/${subtype}`,
{parse: true, scrapy: false},
{ parse: true, scrapy: false },
);
} else {
data = await requestGot(`${urls.BASE_JIKAN}top/${type}/${page}`, {
@ -192,12 +192,12 @@ export default class AnimeController {
if (subtype) {
redisClient.set(
`top_${hashStringMd5(`${type}:${subtype}:${page}`)}`,
JSON.stringify({top}),
JSON.stringify({ top }),
);
} else {
redisClient.set(
`top_${hashStringMd5(`${type}:${page}`)}`,
JSON.stringify({top}),
JSON.stringify({ top }),
);
}
@ -216,9 +216,9 @@ export default class AnimeController {
}
}
return res.status(200).json({top});
return res.status(200).json({ top });
} else {
return res.status(400).json({message: 'Aruppi lost in the shell'});
return res.status(400).json({ message: 'Aruppi lost in the shell' });
}
}
@ -243,9 +243,9 @@ export default class AnimeController {
}));
if (animes.length > 0) {
res.status(200).send({animes});
res.status(200).send({ animes });
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
@ -271,7 +271,6 @@ export default class AnimeController {
scrapy: true,
parse: false,
});
} catch (err) {
return next(err);
}
@ -323,7 +322,7 @@ export default class AnimeController {
redisClient.set(
`lastEpisodes_${hashStringMd5('lastEpisodes')}`,
JSON.stringify({episodes}),
JSON.stringify({ episodes }),
);
/* After 24hrs expire the key. */
@ -338,12 +337,12 @@ export default class AnimeController {
episodes,
});
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async getContentTv(req: Request, res: Response, next: NextFunction) {
const {type, page} = req.params;
const { type, page } = req.params;
const url = 'tv';
let data: any;
@ -395,7 +394,7 @@ export default class AnimeController {
redisClient.set(
`contentTv_${hashStringMd5(`${type}:${page}`)}`,
JSON.stringify({animes}),
JSON.stringify({ animes }),
);
/* After 24hrs expire the key. */
@ -410,12 +409,12 @@ export default class AnimeController {
animes,
});
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async getContentSpecial(req: Request, res: Response, next: NextFunction) {
const {type, page} = req.params;
const { type, page } = req.params;
const url = 'special';
let data: any;
@ -467,7 +466,7 @@ export default class AnimeController {
redisClient.set(
`contentSpecial_${hashStringMd5(`${type}:${page}`)}`,
JSON.stringify({animes}),
JSON.stringify({ animes }),
);
/* After 24hrs expire the key. */
@ -482,12 +481,12 @@ export default class AnimeController {
animes,
});
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async getContentOva(req: Request, res: Response, next: NextFunction) {
const {type, page} = req.params;
const { type, page } = req.params;
const url = 'ova';
let data: any;
@ -539,7 +538,7 @@ export default class AnimeController {
redisClient.set(
`contentOva_${hashStringMd5(`${type}:${page}`)}`,
JSON.stringify({animes}),
JSON.stringify({ animes }),
);
/* After 24hrs expire the key. */
@ -554,12 +553,12 @@ export default class AnimeController {
animes,
});
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async getContentMovie(req: Request, res: Response, next: NextFunction) {
const {type, page} = req.params;
const { type, page } = req.params;
const url = 'movies';
let data: any;
@ -611,7 +610,7 @@ export default class AnimeController {
redisClient.set(
`contentMovie_${hashStringMd5(`${type}:${page}`)}`,
JSON.stringify({animes}),
JSON.stringify({ animes }),
);
/* After 24hrs expire the key. */
@ -626,12 +625,12 @@ export default class AnimeController {
animes,
});
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async getEpisodes(req: Request, res: Response, next: NextFunction) {
const {title} = req.params;
const { title } = req.params;
let searchAnime: ModelA | null;
let episodes: any;
@ -649,7 +648,7 @@ export default class AnimeController {
}
searchAnime = await AnimeModel.findOne({
$or: [{title: {$eq: title}}, {title: {$eq: `${title} (TV)`}}],
$or: [{ title: { $eq: title } }, { title: { $eq: `${title} (TV)` } }],
});
} catch (err) {
return next(err);
@ -676,7 +675,7 @@ export default class AnimeController {
redisClient.set(
`episodes_${hashStringMd5(title)}`,
JSON.stringify({episodes}),
JSON.stringify({ episodes }),
);
/* After 24hrs expire the key. */
@ -687,14 +686,14 @@ export default class AnimeController {
);
}
res.status(200).json({episodes});
res.status(200).json({ episodes });
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async getServers(req: Request, res: Response, next: NextFunction) {
const {id} = req.params;
const { id } = req.params;
let data: any;
try {
@ -710,15 +709,36 @@ export default class AnimeController {
}
}
if (
id.split('/')[0] === 'ver' &&
id.split('-').indexOf('espanol') !== -1
) {
data = await videoServersMonosChinos(id);
} else if (id.split('/')[0] === 'ver') {
let indicator = false;
if (id.split('/')[0] === 'ver' && !indicator) {
data = await videoServersTioAnime(id);
} else {
data = await videoServersJK(id);
if (!data.name) {
indicator = true;
}
}
if (id.split('/')[0] === 'ver' && !indicator) {
data = await videoServersMonosChinos(id);
if (!data.name) {
console.log(data.name);
indicator = true;
}
}
if (!indicator) {
data = undefined;
indicator = true;
/*
This part is just for handling the error
if the two above doesn't complete the operation
does not make sense to have the getServers from
JKAnime.
*/
}
if (data) {
@ -727,7 +747,7 @@ export default class AnimeController {
redisClient.set(
`servers_${hashStringMd5(id)}`,
JSON.stringify({servers: data}),
JSON.stringify({ servers: data }),
);
/* After 24hrs expire the key. */
@ -738,9 +758,9 @@ export default class AnimeController {
);
}
res.status(200).json({servers: data});
res.status(200).json({ servers: data });
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
} catch (err) {
return next(err);
@ -752,7 +772,7 @@ export default class AnimeController {
let animeResult: any;
try {
animeQuery = await AnimeModel.aggregate([{$sample: {size: 1}}]);
animeQuery = await AnimeModel.aggregate([{ $sample: { size: 1 } }]);
} catch (err) {
return next(err);
}
@ -774,7 +794,7 @@ export default class AnimeController {
res.set('Cache-Control', 'no-store');
res.status(200).json(animeResult);
} else {
res.status(500).json({message: 'Aruppi lost in the shell'});
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
}

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

Loading…
Cancel
Save