From 6325d31cc1895211f7e102cd211707241e17e0d7 Mon Sep 17 00:00:00 2001 From: capitanwesler Date: Sun, 14 Mar 2021 21:35:14 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=99=20Finishing=20implementing=20route?= =?UTF-8?q?s=20of=20v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AnimeController.ts | 55 +++++++++++++++++++- src/controllers/DirectoryController.ts | 48 +++++++++++++++++ src/controllers/UtilsController.ts | 72 ++++++++++++++++++++++++++ src/routes.ts | 7 +++ 4 files changed, 180 insertions(+), 2 deletions(-) diff --git a/src/controllers/AnimeController.ts b/src/controllers/AnimeController.ts index 895931a..1faa6b1 100644 --- a/src/controllers/AnimeController.ts +++ b/src/controllers/AnimeController.ts @@ -3,6 +3,13 @@ import { requestGot } from '../utils/requestCall'; import { animeFlvInfo, jkanimeInfo, videoServersJK } from '../utils/util'; import { transformUrlServer } from '../utils/transformerUrl'; import AnimeModel, { Anime as ModelA } from '../database/models/anime.model'; +import { + animeExtraInfo, + getAnimeVideoPromo, + getAnimeCharacters, + getRelatedAnimesFLV, + getRelatedAnimesMAL, +} from '../utils/util'; import urls from '../utils/urls'; /* @@ -272,7 +279,51 @@ export default class AnimeController { } } - async getAnimeGenres(req: Request, res: Response, next: NextFunction) { - const { genre, order, page } = req.params; + async getRandomAnime(req: Request, res: Response, next: NextFunction) { + let animeQuery: ModelA[] | null; + let animeResult: any; + + try { + animeQuery = await AnimeModel.aggregate([{ $sample: { size: 1 } }]); + } catch (err) { + return next(err); + } + + if (!animeQuery[0].jkanime) { + animeResult = { + title: animeQuery[0].title || null, + poster: animeQuery[0].poster || null, + synopsis: animeQuery[0].description || null, + status: animeQuery[0].state || null, + type: animeQuery[0].type || null, + rating: animeQuery[0].score || null, + genres: animeQuery[0].genres || null, + moreInfo: await animeExtraInfo(animeQuery[0].mal_id), + promo: await getAnimeVideoPromo(animeQuery[0].mal_id), + characters: await getAnimeCharacters(animeQuery[0].mal_id), + related: await getRelatedAnimesFLV(animeQuery[0].id), + }; + } else { + animeResult = { + title: animeQuery[0].title || null, + poster: animeQuery[0].poster || null, + synopsis: animeQuery[0].description || null, + status: animeQuery[0].state || null, + type: animeQuery[0].type || null, + rating: animeQuery[0].score || null, + genres: animeQuery[0].genres || null, + moreInfo: await animeExtraInfo(animeQuery[0].mal_id), + promo: await getAnimeVideoPromo(animeQuery[0].mal_id), + characters: await getAnimeCharacters(animeQuery[0].mal_id), + related: await getRelatedAnimesMAL(animeQuery[0].mal_id), + }; + } + + if (animeResult) { + res.set('Cache-Control', 'no-store'); + res.status(200).json({ animeResult }); + } else { + res.status(500).json({ message: 'Aruppi lost in the shell' }); + } } } diff --git a/src/controllers/DirectoryController.ts b/src/controllers/DirectoryController.ts index 499d699..c699b0a 100644 --- a/src/controllers/DirectoryController.ts +++ b/src/controllers/DirectoryController.ts @@ -1,6 +1,7 @@ import { NextFunction, Request, Response } from 'express'; import { requestGot } from '../utils/requestCall'; import AnimeModel, { Anime } from '../database/models/anime.model'; +import GenreModel, { Genre } from '../database/models/genre.model'; import { animeExtraInfo, getAnimeVideoPromo, @@ -209,4 +210,51 @@ export default class DirectoryController { res.status(500).json({ message: 'Aruppi lost in the shell' }); } } + + async getAnimeGenres(req: Request, res: Response, next: NextFunction) { + const { genre, order, page } = req.params; + let data: Genre[]; + let resultReq: any; + + try { + if (genre === undefined && order === undefined && page === undefined) { + data = await GenreModel.find(); + } else { + if (page !== undefined) { + resultReq = await requestGot( + `${urls.BASE_ANIMEFLV_JELU}Genres/${genre}/${order}/${page}`, + { parse: true, scrapy: false }, + ); + } else { + resultReq = await requestGot( + `${urls.BASE_ANIMEFLV_JELU}Genres/${genre}/${order}/1`, + { parse: true, scrapy: false }, + ); + } + } + } catch (err) { + return next(err); + } + + const result: any[] = resultReq.animes.map((item: any) => { + return { + id: item.id, + title: item.title.trim(), + mention: genre, + page: page, + poster: item.poster, + banner: item.banner, + synopsis: item.synopsis, + type: item.type, + rating: item.rating, + genre: item.genre, + }; + }); + + if (result.length > 0) { + res.status(200).json({ result }); + } else { + res.status(500).json({ message: 'Aruppi lost in the shell' }); + } + } } diff --git a/src/controllers/UtilsController.ts b/src/controllers/UtilsController.ts index e92fd78..d2ea2ab 100644 --- a/src/controllers/UtilsController.ts +++ b/src/controllers/UtilsController.ts @@ -415,4 +415,76 @@ export default class UtilsController { res.status(500).json({ message: 'Aruppi lost in the shell' }); } } + + async getDestAnimePlatforms(req: Request, res: Response, next: NextFunction) { + let data: any; + + try { + data = await requestGot( + `${urls.BASE_ARUPPI}res/documents/animelegal/top.json`, + { parse: true, scrapy: false }, + ); + } catch (err) { + return next(err); + } + + const result: any[] = data.map((item: any) => { + return { + id: item.id, + name: item.name, + logo: item.logo, + link: item.link, + }; + }); + + if (result.length > 0) { + res.status(200).json({ result }); + } else { + res.status(500).json({ message: 'Aruppi lost in the shell' }); + } + } + + async getPlatforms(req: Request, res: Response, next: NextFunction) { + const { id } = req.params; + let data: any; + + if (id === undefined) { + data = await requestGot( + `${urls.BASE_ARUPPI}res/documents/animelegal/type/platforms.json`, + { parse: true, scrapy: false }, + ); + } else if ( + id === 'producers' || + id === 'apps' || + id === 'publishers' || + 'events' + ) { + data = await requestGot( + `${urls.BASE_ARUPPI}res/documents/animelegal/type/${id}.json`, + { parse: true, scrapy: false }, + ); + } else { + data = await requestGot( + `${urls.BASE_ARUPPI}res/documents/animelegal/type/${id}.json`, + { parse: true, scrapy: false }, + ); + } + + const result: any[] = data.map((item: any) => { + return { + id: item.id, + name: item.name, + type: item.type, + logo: item.logo, + cover: item.cover, + webpage: item.webpage, + }; + }); + + if (result.length > 0) { + res.status(200).json({ result }); + } else { + res.status(500).json({ message: 'Aruppi lost in the shell' }); + } + } } diff --git a/src/routes.ts b/src/routes.ts index 9f22ad8..fc7cf44 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -79,6 +79,7 @@ routes.get( '/api/v4/getAnimeServers/:id([^/]+/[^/]+)', animeController.getServers, ); +routes.get('/api/v4/randomAnime', animeController.getRandomAnime); /* Directory Controller */ routes.get( @@ -90,6 +91,10 @@ routes.get('/api/v4/allSeasons', directoryController.allSeasons); routes.get('/api/v4/laterSeasons', directoryController.laterSeasons); routes.get('/api/v4/moreInfo/:title', directoryController.getMoreInfo); routes.get('/api/v4/search/:title', directoryController.search); +routes.get( + '/api/v4/getByGenres/:genre?/:order?/:page?', + directoryController.getAnimeGenres, +); /* Utils Controller */ routes.get('/api/v4/anitakume', utilsController.getAnitakume); @@ -103,5 +108,7 @@ routes.get('/api/v4/themes/:title', utilsController.getOpAndEd); routes.get('/api/v4/themesYear/:year?', utilsController.getThemesYear); routes.get('/api/v4/randomTheme', utilsController.randomTheme); routes.get('/api/v4/artists/:id?', utilsController.getArtist); +routes.get('/api/v4/destAnimePlatforms', utilsController.getDestAnimePlatforms); +routes.get('/api/v4/platforms/:id?', utilsController.getPlatforms); export default routes;