😎 Refactoring the getLastEpisodes call

Refactoring the lastEpisodes in the API, removed a unused function and remove unused switches.
pull/49/head v4.0.8
capitanwesler 4 years ago
parent 327c635467
commit 10cdb63ac4

@ -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,15 +243,13 @@ 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'});
} }
} }
async getLastEpisodes(req: Request, res: Response, next: NextFunction) { async getLastEpisodes(req: Request, res: Response, next: NextFunction) {
const options = 'monoschinos';
let data: any;
let $: cheerio.Root; let $: cheerio.Root;
let episodes: Episode[] = []; let episodes: Episode[] = [];
let animeList: any[] = []; let animeList: any[] = [];
@ -269,83 +267,54 @@ export default class AnimeController {
} }
} }
switch (options) { $ = await requestGot(`${urls.BASE_MONOSCHINOS}`, {
case 'monoschinos': scrapy: true,
$ = await requestGot(`${urls.BASE_MONOSCHINOS}`, { parse: false,
scrapy: true, });
parse: false,
});
break;
default:
data = await requestGot(
`${urls.BASE_ANIMEFLV_JELU}LatestEpisodesAdded`,
{
parse: true,
scrapy: false,
},
);
break;
}
} catch (err) { } catch (err) {
return next(err); return next(err);
} }
switch (options) { let getLastest: any = $!('.container .caps .container')[0];
case 'monoschinos':
let getLastest: any = $!('.container .caps .container')[0]; $!(getLastest)
.find('.row article')
$!(getLastest) .each((index: number, element: cheerio.Element) => {
.find('.row article') let el: cheerio.Cheerio = $(element);
.each((index: number, element: cheerio.Element) => { let title: string | undefined = el
let el: cheerio.Cheerio = $(element); .find('.Title')
let title: string | undefined = el .html()
.find('.Title') ?.split('\t')[0];
.html() let img: any = el.find('.Image img').attr('src');
?.split('\t')[0]; let type: any = el.find('.Image figure span').text();
let img: any = el.find('.Image img').attr('src'); type = type.substring(1, type.length);
let type: any = el.find('.Image figure span').text(); let nEpisode: any = el.find('.dataEpi .episode').text();
type = type.substring(1, type.length); nEpisode = parseInt(nEpisode.split('\n')[1]);
let nEpisode: any = el.find('.dataEpi .episode').text(); let id: any = el.find('a').attr('href');
nEpisode = parseInt(nEpisode.split('\n')[1]); id = id.split('/')[4];
let id: any = el.find('a').attr('href'); id = id.split('-');
id = id.split('/')[4]; id.splice(id.length - 2, 2);
id = id.split('-'); id = `${id.join('-')}-episodio-${nEpisode}`;
id.splice(id.length - 2, 2);
id = `${id.join('-')}-episodio-${nEpisode}`; let anime = {
id: `ver/${id}`,
let anime = { title,
id: `ver/${id}`, image: img,
title, episode: nEpisode,
image: img, };
episode: nEpisode,
}; animeList.push(anime);
});
animeList.push(anime);
}); for (const anime of animeList) {
episodes.push({
for (const anime of animeList) { id: anime.id,
episodes.push({ title: anime.title,
id: anime.id, image: await imageUrlToBase64(anime.image),
title: anime.title, episode: anime.episode,
image: await imageUrlToBase64(anime.image), servers: await videoServersMonosChinos(anime.id),
episode: anime.episode, });
servers: await videoServersMonosChinos(anime.id),
});
}
break;
default:
for (const episode of data.episodes) {
const formattedEpisode: Episode = {
id: '12345/' + episode.id,
title: episode.title,
image: episode.poster,
episode: episode.episode,
servers: await transformUrlServer(episode.servers),
};
episodes.push(formattedEpisode);
}
break;
} }
if (episodes.length > 0) { if (episodes.length > 0) {
@ -354,7 +323,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. */
@ -369,12 +338,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;
@ -426,7 +395,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. */
@ -441,12 +410,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;
@ -498,7 +467,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. */
@ -513,12 +482,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;
@ -570,7 +539,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. */
@ -585,12 +554,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;
@ -642,7 +611,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. */
@ -657,12 +626,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;
@ -680,7 +649,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);
@ -707,7 +676,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. */
@ -718,14 +687,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 {
@ -758,7 +727,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. */
@ -769,9 +738,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);
@ -783,7 +752,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);
} }
@ -805,7 +774,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'});
} }
} }
} }

@ -72,7 +72,7 @@ routes.get('/api/v4/', (req: Request, res: Response) => {
routes.get('/api/v4/schedule/:day', animeController.schedule); routes.get('/api/v4/schedule/:day', animeController.schedule);
routes.get('/api/v4/top/:type/:subtype?/:page', animeController.top); routes.get('/api/v4/top/:type/:subtype?/:page', animeController.top);
routes.get('/api/v4/allAnimes', animeController.getAllAnimes); routes.get('/api/v4/allAnimes', animeController.getAllAnimes);
routes.get('/api/v4/lastEpisodes/:options?', animeController.getLastEpisodes); routes.get('/api/v4/lastEpisodes', animeController.getLastEpisodes);
routes.get('/api/v4/movies/:type/:page', animeController.getContentMovie); routes.get('/api/v4/movies/:type/:page', animeController.getContentMovie);
routes.get('/api/v4/ova/:type/:page', animeController.getContentOva); routes.get('/api/v4/ova/:type/:page', animeController.getContentOva);
routes.get('/api/v4/special/:type/:page', animeController.getContentSpecial); routes.get('/api/v4/special/:type/:page', animeController.getContentSpecial);

Loading…
Cancel
Save