😎 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 > 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.0.9", "version": "4.1.0",
"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": {

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

Loading…
Cancel
Save