@ -1,13 +1,11 @@
import { NextFunction , Request , Response } from 'express' ;
import { requestGot } from '../utils/requestCall' ;
import {
imageUrlToBase64 ,
animeFlvInfo ,
jkanimeInfo ,
monoschinosInfo ,
tioanimeInfo ,
videoServersJK ,
videoServersMonosChinos ,
videoServersTioAnime ,
} from '../utils/util' ;
import { transformUrlServer } from '../utils/transformerUrl' ;
import AnimeModel , { Anime as ModelA } from '../database/models/anime.model' ;
@ -17,6 +15,7 @@ import {
animeExtraInfo ,
getAnimeVideoPromo ,
getAnimeCharacters ,
getRelatedAnimesFLV ,
getRelatedAnimesMAL ,
} from '../utils/util' ;
import urls from '../utils/urls' ;
@ -81,51 +80,47 @@ interface Movie {
export default class AnimeController {
async schedule ( req : Request , res : Response , next : NextFunction ) {
const { day } = req . params ;
let info : any ;
let data : any ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` schedule_ ${ hashStringMd5 ( day ) } ` ,
) ;
const resultQueryRedis : any = await redisClient . get (
` schedule_ ${ hashStringMd5 ( day ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
data = await requestGot ( ` ${ urls . BASE_JIKAN } schedule/ ${ day } ` , {
parse : true ,
scrapy : false ,
} ) ;
}
info = await requestGot ( ` ${ urls . BASE_JIKAN } schedules?filter= ${ day } ` , {
parse : true ,
scrapy : false ,
} ) ;
} catch ( err ) {
return next ( err ) ;
}
const animeList : Schedule [ ] = info. data . map ( ( item : any ) = > ( {
title : item.title s.find( ( x : { type : string ; } ) = > x . type === "Default" ) . title ,
const animeList : Schedule [ ] = data [ day ] . map ( ( item : Schedule ) = > ( {
title : item.title ,
malid : item.mal_id ,
image : item.image s.jpg.image _url,
image : item.image _url,
} ) ) ;
if ( animeList . length > 0 ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
/* Set the key in the redis cache. */
redisClient . set (
` schedule_ ${ hashStringMd5 ( day ) } ` ,
JSON . stringify ( { day : animeList } ) ,
) ;
redisClient . set (
` schedule_ ${ hashStringMd5 ( day ) } ` ,
JSON . stringify ( { day : animeList } ) ,
) ;
/* After 6 hrs expire the key. */
/* After 24 hrs expire the key. */
redisClient . expire (
` schedule_ ${ hashStringMd5 ( day ) } ` ,
+ 21600 ,
) ;
}
redisClient . expireat (
` schedule_ ${ hashStringMd5 ( day ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
res . status ( 200 ) . json ( {
day : animeList ,
@ -137,50 +132,47 @@ export default class AnimeController {
async top ( req : Request , res : Response , next : NextFunction ) {
const { type , subtype , page } = req . params ;
let info : any ;
let data : any ;
try {
if ( redisClient . connected ) {
let resultQueryRedis : any ;
if ( subtype ) {
resultQueryRedis = await redisClient . get (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ subtype } : ${ page } ` ) } ` ,
) ;
} else {
resultQueryRedis = await redisClient . get (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
}
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
let resultQueryRedis : any ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
if ( subtype ) {
resultQueryRedis = await redisClient . get (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ subtype } : ${ page } ` ) } ` ,
) ;
} else {
resultQueryRedis = await redisClient . get (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
}
if ( subtype !== undefined ) {
info = await requestGot (
` ${ urls . BASE_JIKAN } top/ ${ type } ?filter= ${ subtype } &page= ${ page } ` ,
{ parse : true , scrapy : false } ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
info = await requestGot ( ` ${ urls . BASE_JIKAN } top/ ${ type } ?page= ${ page } ` , {
parse : true ,
scrapy : false ,
} ) ;
if ( subtype !== undefined ) {
data = await requestGot (
` ${ urls . BASE_JIKAN } top/ ${ type } / ${ page } / ${ subtype } ` ,
{ parse : true , scrapy : false } ,
) ;
} else {
data = await requestGot ( ` ${ urls . BASE_JIKAN } top/ ${ type } / ${ page } ` , {
parse : true ,
scrapy : false ,
} ) ;
}
}
} catch ( err ) {
return next ( err ) ;
}
const top : Top [ ] = info . data . map ( ( item : any , index : number ) = > ( {
// A little hacky way to fix null ranks
rank : item.rank || index + 1 + ( info . pagination . current_page - 1 ) * info . pagination . items . per_page ,
title : item.titles.find ( ( x : { type : string ; } ) = > x . type === "Default" ) . title ,
const top : Top [ ] = data . top . map ( ( item : Top ) = > ( {
rank : item.rank ,
title : item.title ,
url : item.url ,
image_url : item.image s.jpg.image _url,
image_url : item.image _url,
type : type ,
subtype : subtype ,
page : page ,
@ -188,33 +180,31 @@ export default class AnimeController {
} ) ) ;
if ( top . length > 0 ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
if ( subtype ) {
redisClient . set (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ subtype } : ${ page } ` ) } ` ,
JSON . stringify ( { top } ) ,
) ;
} else {
redisClient . set (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { top } ) ,
) ;
}
/* Set the key in the redis cache. */
if ( subtype ) {
redisClient . set (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ subtype } : ${ page } ` ) } ` ,
JSON . stringify ( { top } ) ,
) ;
} else {
redisClient . set (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { top } ) ,
) ;
}
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
if ( subtype ) {
redisClient . expireat (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ subtype } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
} else {
redisClient . expireat (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
if ( subtype ) {
redisClient . expireat (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ subtype } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
} else {
redisClient . expireat (
` top_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
return res . status ( 200 ) . json ( { top } ) ;
@ -230,7 +220,6 @@ export default class AnimeController {
data = await requestGot ( ` ${ urls . BASE_ANIMEFLV } api/animes/list ` , {
parse : true ,
scrapy : false ,
spoof : true ,
} ) ;
} catch ( err ) {
return next ( err ) ;
@ -252,68 +241,57 @@ export default class AnimeController {
}
async getLastEpisodes ( req : Request , res : Response , next : NextFunction ) {
let lastEpisodes ;
let data : any ;
let episodes : Episode [ ] = [ ] ;
let animeList : any [ ] = [ ] ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` lastEpisodes_ ${ hashStringMd5 ( 'lastEpisodes' ) } ` ,
) ;
const resultQueryRedis : any = await redisClient . get (
` lastEpisodes_ ${ hashStringMd5 ( 'lastEpisodes' ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } LatestEpisodesAdded ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
}
lastEpisodes = await requestGot ( ` ${ urls . BASE_ARUPPI_MONOSCHINOS } lastest ` , {
scrapy : false ,
parse : true ,
} ) ;
} catch ( err ) {
return next ( err ) ;
}
for ( const anime of lastE pisodes) {
animeList . push ( {
id : ` ver/ ${ anime . id } ` ,
title : anim e.title,
image : anime.image ,
episode : anime.no ,
} ) ;
}
for ( const episode of data . episodes ) {
const formattedEpisode : Episode = {
id : '12345/' + episode . id ,
title : episod e.title,
image : episode.poster ,
episode : episode.episode ,
servers : await transformUrlServer ( episode . servers ) ,
} ;
for ( const anime of animeList ) {
episodes . push ( {
id : anime.id ,
title : anime.title ,
image : await imageUrlToBase64 ( anime . image ) ,
episode : anime.episode ,
servers : await videoServersMonosChinos ( anime . id ) ,
} ) ;
episodes . push ( formattedEpisode ) ;
}
if ( episodes . length > 0 ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
/* Set the key in the redis cache. */
redisClient . set (
` lastEpisodes_ ${ hashStringMd5 ( 'lastEpisodes' ) } ` ,
JSON . stringify ( { episodes } ) ,
) ;
redisClient . set (
` lastEpisodes_ ${ hashStringMd5 ( 'lastEpisodes' ) } ` ,
JSON . stringify ( { episodes } ) ,
) ;
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient . expireat (
` lastEpisodes_ ${ hashStringMd5 ( 'lastEpisodes' ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 1800 ,
) ;
}
redisClient . expireat (
` lastEpisodes_ ${ hashStringMd5 ( 'lastEpisodes' ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 1800 ,
) ;
res . status ( 200 ) . json ( {
episodes ,
@ -329,27 +307,25 @@ export default class AnimeController {
let data : any ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` contentTv_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
const resultQueryRedis : any = await redisClient . get (
` contentTv_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
}
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
} catch ( err ) {
return next ( err ) ;
}
@ -371,21 +347,19 @@ export default class AnimeController {
} ) ;
if ( animes . length > 0 ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
/* Set the key in the redis cache. */
redisClient . set (
` contentTv_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
redisClient . set (
` contentTv_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient . expireat (
` contentTv_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
redisClient . expireat (
` contentTv_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
res . status ( 200 ) . json ( {
animes ,
@ -401,27 +375,25 @@ export default class AnimeController {
let data : any ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` contentSpecial_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
const resultQueryRedis : any = await redisClient . get (
` contentSpecial_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
}
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
} catch ( err ) {
return next ( err ) ;
}
@ -443,21 +415,19 @@ export default class AnimeController {
} ) ;
if ( animes . length > 0 ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
/* Set the key in the redis cache. */
redisClient . set (
` contentSpecial_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
redisClient . set (
` contentSpecial_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient . expireat (
` contentSpecial_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
redisClient . expireat (
` contentSpecial_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
res . status ( 200 ) . json ( {
animes ,
@ -473,27 +443,25 @@ export default class AnimeController {
let data : any ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` contentOva_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
const resultQueryRedis : any = await redisClient . get (
` contentOva_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
}
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
} catch ( err ) {
return next ( err ) ;
}
@ -515,21 +483,19 @@ export default class AnimeController {
} ) ;
if ( animes . length > 0 ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
/* Set the key in the redis cache. */
redisClient . set (
` contentOva_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
redisClient . set (
` contentOva_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient . expireat (
` contentOva_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
redisClient . expireat (
` contentOva_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
res . status ( 200 ) . json ( {
animes ,
@ -545,27 +511,25 @@ export default class AnimeController {
let data : any ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` contentMovie_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
const resultQueryRedis : any = await redisClient . get (
` contentMovie_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
}
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } ${
url . charAt ( 0 ) . toUpperCase ( ) + url . slice ( 1 )
} / $ { type } / $ { page } ` ,
{
parse : true ,
scrapy : false ,
} ,
) ;
} catch ( err ) {
return next ( err ) ;
}
@ -587,21 +551,19 @@ export default class AnimeController {
} ) ;
if ( animes . length > 0 ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
/* Set the key in the redis cache. */
redisClient . set (
` contentMovie_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
redisClient . set (
` contentMovie_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
JSON . stringify ( { animes } ) ,
) ;
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient . expireat (
` contentMovie_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
redisClient . expireat (
` contentMovie_ ${ hashStringMd5 ( ` ${ type } : ${ page } ` ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
res . status ( 200 ) . json ( {
animes ,
@ -617,34 +579,32 @@ export default class AnimeController {
let episodes : any ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` episodes_ ${ hashStringMd5 ( title ) } ` ,
) ;
const resultQueryRedis : any = await redisClient . get (
` episodes_ ${ hashStringMd5 ( title ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
searchAnime = await AnimeModel . findOne ( {
$or : [ { title : { $eq : title } } , { title : { $eq : ` ${ title } (TV) ` } } ] ,
} ) ;
}
searchAnime = await AnimeModel . findOne ( {
$or : [ { title : { $eq : title } } , { title : { $eq : ` ${ title } (TV) ` } } ] ,
} ) ;
} catch ( err ) {
return next ( err ) ;
}
switch ( searchAnime ? . source ) {
case 'animeflv' :
episodes = await animeFlvInfo ( searchAnime ? . id ) ;
break ;
case 'jkanime' :
episodes = await jkanimeInfo ( searchAnime ? . id , searchAnime ? . mal_id ) ;
episodes = await jkanimeInfo ( searchAnime ? . id );
break ;
case 'monoschinos' :
episodes = await monoschinosInfo ( searchAnime ? . id , searchAnime ? . mal_id ) ;
break ;
case 'tioanime' :
episodes = await tioanimeInfo ( searchAnime ? . id , searchAnime ? . mal_id ) ;
episodes = await monoschinosInfo ( searchAnime ? . id ) ;
break ;
default :
episodes = undefined ;
@ -652,21 +612,19 @@ export default class AnimeController {
}
if ( episodes ) {
if ( redisClient . connected ) {
/* Set the key in the redis cache. */
/* Set the key in the redis cache. */
redisClient . set (
` episodes_ ${ hashStringMd5 ( title ) } ` ,
JSON . stringify ( { episodes } ) ,
) ;
redisClient . set (
` episodes_ ${ hashStringMd5 ( title ) } ` ,
JSON . stringify ( { episodes } ) ,
) ;
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient . expireat (
` episodes_ ${ hashStringMd5 ( title ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
redisClient . expireat (
` episodes_ ${ hashStringMd5 ( title ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
res . status ( 200 ) . json ( { episodes } ) ;
} else {
@ -679,52 +637,31 @@ export default class AnimeController {
let data : any ;
try {
if ( redisClient . connected ) {
const resultQueryRedis : any = await redisClient . get (
` servers_ ${ hashStringMd5 ( id ) } ` ,
) ;
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
}
}
let indicator = false ;
if ( id . split ( '/' ) [ 0 ] === 'ver' && ! indicator ) {
data = await videoServersTioAnime ( id ) ;
const resultQueryRedis : any = await redisClient . get (
` servers_ ${ hashStringMd5 ( id ) } ` ,
) ;
if ( ! data . name ) {
indicator = true ;
}
}
if ( resultQueryRedis ) {
const resultRedis : any = JSON . parse ( resultQueryRedis ) ;
if ( id . split ( '/' ) [ 0 ] === 'ver' && ! indicator ) {
data = await videoServersMonosChinos ( id ) ;
return res . status ( 200 ) . json ( resultRedis ) ;
} else {
if ( isNaN ( parseInt ( id . split ( '/' ) [ 0 ] ) ) ) {
if ( id . split ( '/' ) [ 0 ] === 'ver' ) {
data = await videoServersMonosChinos ( id ) ;
} else {
data = await videoServersJK ( id ) ;
}
} else {
data = await requestGot (
` ${ urls . BASE_ANIMEFLV_JELU } GetAnimeServers/ ${ id } ` ,
{ parse : true , scrapy : false } ,
) ;
if ( ! data . name ) {
console . log ( data . name ) ;
indicator = true ;
data = await transformUrlServer ( data . servers ) ;
}
}
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 ( redisClient . connected ) {
if ( data ) {
/* Set the key in the redis cache. */
redisClient . set (
@ -738,11 +675,11 @@ export default class AnimeController {
` servers_ ${ hashStringMd5 ( id ) } ` ,
parseInt ( ` ${ + new Date ( ) / 1000 } ` , 10 ) + 7200 ,
) ;
}
res . status ( 200 ) . json ( { servers : data } ) ;
} else {
res . status ( 500 ) . json ( { message : 'Aruppi lost in the shell' } ) ;
res . status ( 200 ) . json ( { servers : data } ) ;
} else {
res . status ( 500 ) . json ( { message : 'Aruppi lost in the shell' } ) ;
}
}
} catch ( err ) {
return next ( err ) ;
@ -759,18 +696,41 @@ export default class AnimeController {
return next ( err ) ;
}
animeResult = {
title : animeQuery [ 0 ] . title || null ,
poster : animeQuery [ 0 ] . poster || null ,
synopsis : animeQuery [ 0 ] . description || 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 ) ,
} ;
switch ( animeQuery [ 0 ] . source ) {
case 'animeflv' :
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 ) ,
} ;
break ;
case '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 getRelatedAnimesMAL ( animeQuery [ 0 ] . mal_id ) ,
} ;
break ;
default :
animeResult = undefined ;
break ;
}
if ( animeResult ) {
res . set ( 'Cache-Control' , 'no-store' ) ;