From c4d83df97262ebfe3513fd3b3df4aeccdba8a0ea Mon Sep 17 00:00:00 2001 From: capitanwesler Date: Thu, 1 Apr 2021 12:42:50 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96Implementing=20servers=20and=20epis?= =?UTF-8?q?odes=20to=20monoschinos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AnimeController.ts | 18 ++++- src/utils/util.ts | 119 +++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+), 2 deletions(-) diff --git a/src/controllers/AnimeController.ts b/src/controllers/AnimeController.ts index d42484a..3bf0190 100644 --- a/src/controllers/AnimeController.ts +++ b/src/controllers/AnimeController.ts @@ -1,6 +1,12 @@ import { NextFunction, Request, Response } from 'express'; import { requestGot } from '../utils/requestCall'; -import { animeFlvInfo, jkanimeInfo, videoServersJK } from '../utils/util'; +import { + animeFlvInfo, + jkanimeInfo, + monoschinosInfo, + videoServersJK, + videoServersMonosChinos, +} from '../utils/util'; import { transformUrlServer } from '../utils/transformerUrl'; import AnimeModel, { Anime as ModelA } from '../database/models/anime.model'; import util from 'util'; @@ -597,6 +603,9 @@ export default class AnimeController { case 'jkanime': episodes = await jkanimeInfo(searchAnime?.id); break; + case 'monoschinos': + episodes = await monoschinosInfo(searchAnime?.id); + break; default: episodes = undefined; break; @@ -637,8 +646,13 @@ export default class AnimeController { return res.status(200).json(resultRedis); } else { + console.log(id); if (isNaN(parseInt(id.split('/')[0]))) { - data = await videoServersJK(id); + if (id.split('/')[0] === 'ver') { + data = await videoServersMonosChinos(id); + } else { + data = await videoServersJK(id); + } } else { data = await requestGot( `${urls.BASE_ANIMEFLV_JELU}GetAnimeServers/${id}`, diff --git a/src/utils/util.ts b/src/utils/util.ts index 91655a6..2d1db98 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -524,6 +524,125 @@ export const jkanimeInfo = async (id: string | undefined) => { } }; +export const monoschinosInfo = async (id: string | undefined) => { + let $: cheerio.Root; + let episodeList: any[] = []; + + try { + const resultQueryRedis: any = await redisClient.get( + `monoschinosInfo_${hashStringMd5(id!)}`, + ); + + if (resultQueryRedis) { + const resultRedis: any = JSON.parse(resultQueryRedis); + + return resultRedis; + } else { + $ = await requestGot(`${urls.BASE_MONOSCHINOS}anime/${id}`, { + scrapy: true, + parse: false, + }); + } + } catch (err) { + return err; + } + + $('.SerieCaps a').each((index: number, element: cheerio.Element) => { + episodeList.push({ + episode: parseInt($(element).attr('href')?.split('-')[3]!), + id: `${$(element).attr('href')?.split('/')[3]}/${ + $(element).attr('href')?.split('/')[4] + }`, + }); + }); + + if (episodeList.length > 0) { + /* Set the key in the redis cache. */ + + redisClient.set( + `monoschinosInfo_${hashStringMd5(id!)}`, + JSON.stringify(episodeList), + ); + + /* After 24hrs expire the key. */ + + redisClient.expireat( + `monoschinosInfo_${hashStringMd5(id!)}`, + parseInt(`${+new Date() / 1000}`, 10) + 7200, + ); + + return episodeList; + } else { + return null; + } +}; + +export const videoServersMonosChinos = async (id: string) => { + let $: cheerio.Root; + let videoServers: any[] = []; + let nameServers: any[] = []; + + try { + const resultQueryRedis: any = await redisClient.get( + `videoServersMonosChinos_${hashStringMd5(id)}`, + ); + + if (resultQueryRedis) { + const resultRedis: any = JSON.parse(resultQueryRedis); + + return resultRedis; + } else { + $ = await requestGot(`${urls.BASE_MONOSCHINOS}${id}`, { + scrapy: true, + parse: false, + }); + } + } catch (err) { + return err; + } + + let videosContainer = $('.TPlayerTb').text(); + let counter: number = 1; + + $(videosContainer).each((index: number, element: cheerio.Element) => { + let video = $(element).attr('src'); + + if (video) { + video = video.split('url=')[1]; + video = decodeURIComponent(video); + video = video.split('&id')[0]; + } + + if (video) { + videoServers.push({ + id: `Op${counter++}`, + url: video, + direct: false, + }); + } + }); + + if (videoServers.length > 0) { + /* Set the key in the redis cache. */ + + redisClient.set( + `videoServersMonosChinos_${hashStringMd5(id)}`, + JSON.stringify(videoServers), + ); + + /* After 24hrs expire the key. */ + + redisClient.expireat( + `videoServersMonosChinos_${hashStringMd5(id)}`, + parseInt(`${+new Date() / 1000}`, 10) + 7200, + ); + + return videoServers; + } else { + return null; + } +}; + export const videoServersJK = async (id: string) => { let $: cheerio.Root; let servers: any = {};