Merge pull request #42 from aruppi/develop

Adding the anime state and the nextEpisodeDate
pull/49/head
Jesús María 4 years ago committed by GitHub
commit 893a9e7386
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,4 +1,4 @@
# **Aruppi API** (v4.0.2)
# **Aruppi API** (v4.0.4)
> This API has everything about Japan, from anime, music, radio, images, videos ... to japanese culture
>
@ -59,10 +59,10 @@ In order to install the project and all dependencies, enter in the project folde
### Start the project
```bash
npm start
```
```bash
yarn start
```
@ -72,6 +72,7 @@ yarn start
```bash
npm build
```
```bash
yarn build
```

@ -1,6 +1,6 @@
{
"name": "aruppi",
"version": "4.0.2",
"version": "4.0.4",
"description": "Aruppi is a custom API to obtain data from the Japanese culture for the mobile app",
"main": "./src/api/api.ts",
"scripts": {

@ -84,6 +84,7 @@ export default class AnimeController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`schedule_${hashStringMd5(day)}`,
);
@ -92,12 +93,13 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(`${urls.BASE_JIKAN}schedule/${day}`, {
parse: true,
scrapy: false,
});
}
} catch (err) {
return next(err);
}
@ -109,6 +111,7 @@ export default class AnimeController {
}));
if (animeList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -122,6 +125,7 @@ export default class AnimeController {
`schedule_${hashStringMd5(day)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({
day: animeList,
@ -136,6 +140,7 @@ export default class AnimeController {
let data: any;
try {
if (redisClient.connected) {
let resultQueryRedis: any;
if (subtype) {
@ -152,7 +157,9 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
if (subtype !== undefined) {
data = await requestGot(
`${urls.BASE_JIKAN}top/${type}/${page}/${subtype}`,
@ -164,7 +171,6 @@ export default class AnimeController {
scrapy: false,
});
}
}
} catch (err) {
return next(err);
}
@ -181,6 +187,7 @@ export default class AnimeController {
}));
if (top.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
if (subtype) {
redisClient.set(
@ -207,6 +214,7 @@ export default class AnimeController {
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
}
return res.status(200).json({ top });
} else {
@ -248,6 +256,7 @@ export default class AnimeController {
let animeList: any[] = [];
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`lastEpisodes_${hashStringMd5('lastEpisodes')}`,
);
@ -256,7 +265,9 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
// @ANIMEFLV
// data = await requestGot(
// `${urls.BASE_ANIMEFLV_JELU}LatestEpisodesAdded`,
@ -270,7 +281,6 @@ export default class AnimeController {
scrapy: true,
parse: false,
});
}
} catch (err) {
return next(err);
}
@ -329,6 +339,7 @@ export default class AnimeController {
}
if (episodes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -342,6 +353,7 @@ export default class AnimeController {
`lastEpisodes_${hashStringMd5('lastEpisodes')}`,
parseInt(`${+new Date() / 1000}`, 10) + 1800,
);
}
res.status(200).json({
episodes,
@ -357,6 +369,7 @@ export default class AnimeController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`contentTv_${hashStringMd5(`${type}:${page}`)}`,
);
@ -365,7 +378,9 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(
`${urls.BASE_ANIMEFLV_JELU}${
url.charAt(0).toUpperCase() + url.slice(1)
@ -375,7 +390,6 @@ export default class AnimeController {
scrapy: false,
},
);
}
} catch (err) {
return next(err);
}
@ -397,6 +411,7 @@ export default class AnimeController {
});
if (animes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -410,6 +425,7 @@ export default class AnimeController {
`contentTv_${hashStringMd5(`${type}:${page}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({
animes,
@ -425,6 +441,7 @@ export default class AnimeController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`contentSpecial_${hashStringMd5(`${type}:${page}`)}`,
);
@ -433,7 +450,9 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(
`${urls.BASE_ANIMEFLV_JELU}${
url.charAt(0).toUpperCase() + url.slice(1)
@ -443,7 +462,6 @@ export default class AnimeController {
scrapy: false,
},
);
}
} catch (err) {
return next(err);
}
@ -465,6 +483,7 @@ export default class AnimeController {
});
if (animes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -478,6 +497,7 @@ export default class AnimeController {
`contentSpecial_${hashStringMd5(`${type}:${page}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({
animes,
@ -493,6 +513,7 @@ export default class AnimeController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`contentOva_${hashStringMd5(`${type}:${page}`)}`,
);
@ -501,7 +522,9 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(
`${urls.BASE_ANIMEFLV_JELU}${
url.charAt(0).toUpperCase() + url.slice(1)
@ -511,7 +534,6 @@ export default class AnimeController {
scrapy: false,
},
);
}
} catch (err) {
return next(err);
}
@ -533,6 +555,7 @@ export default class AnimeController {
});
if (animes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -546,6 +569,7 @@ export default class AnimeController {
`contentOva_${hashStringMd5(`${type}:${page}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({
animes,
@ -561,6 +585,7 @@ export default class AnimeController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`contentMovie_${hashStringMd5(`${type}:${page}`)}`,
);
@ -569,7 +594,9 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(
`${urls.BASE_ANIMEFLV_JELU}${
url.charAt(0).toUpperCase() + url.slice(1)
@ -579,7 +606,6 @@ export default class AnimeController {
scrapy: false,
},
);
}
} catch (err) {
return next(err);
}
@ -601,6 +627,7 @@ export default class AnimeController {
});
if (animes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -614,6 +641,7 @@ export default class AnimeController {
`contentMovie_${hashStringMd5(`${type}:${page}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({
animes,
@ -629,6 +657,7 @@ export default class AnimeController {
let episodes: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`episodes_${hashStringMd5(title)}`,
);
@ -637,11 +666,12 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
searchAnime = await AnimeModel.findOne({
$or: [{ title: { $eq: title } }, { title: { $eq: `${title} (TV)` } }],
});
}
} catch (err) {
return next(err);
}
@ -654,7 +684,7 @@ export default class AnimeController {
episodes = await jkanimeInfo(searchAnime?.id);
break;
case 'monoschinos':
episodes = await monoschinosInfo(searchAnime?.id);
episodes = await monoschinosInfo(searchAnime?.id, searchAnime?.mal_id);
break;
default:
episodes = undefined;
@ -662,6 +692,7 @@ export default class AnimeController {
}
if (episodes) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -675,6 +706,7 @@ export default class AnimeController {
`episodes_${hashStringMd5(title)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ episodes });
} else {
@ -687,6 +719,7 @@ export default class AnimeController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`servers_${hashStringMd5(id)}`,
);
@ -695,7 +728,9 @@ export default class AnimeController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
if (isNaN(parseInt(id.split('/')[0]))) {
if (id.split('/')[0] === 'ver') {
data = await videoServersMonosChinos(id);
@ -712,6 +747,7 @@ export default class AnimeController {
}
if (data) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -725,12 +761,12 @@ 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' });
}
}
} catch (err) {
return next(err);
}
@ -752,7 +788,6 @@ export default class AnimeController {
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,
@ -767,7 +802,6 @@ export default class AnimeController {
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,

@ -61,7 +61,6 @@ export default class DirectoryController {
poster: item.poster,
type: item.type,
genres: item.genres,
state: item.state,
score: item.score,
source: item.source,
description: item.description,
@ -87,7 +86,6 @@ export default class DirectoryController {
poster: item.poster,
type: item.type,
genres: item.genres,
state: item.state,
score: item.score,
source: item.source,
description: item.description,
@ -111,6 +109,7 @@ export default class DirectoryController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`season_${hashStringMd5(`${year}:${type}`)}`,
);
@ -119,12 +118,13 @@ export default class DirectoryController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(`${urls.BASE_JIKAN}season/${year}/${type}`, {
scrapy: false,
parse: true,
});
}
} catch (err) {
return next(err);
}
@ -138,6 +138,7 @@ export default class DirectoryController {
});
if (season.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -151,6 +152,7 @@ export default class DirectoryController {
`season_${hashStringMd5(`${year}:${type}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({
season,
@ -164,6 +166,7 @@ export default class DirectoryController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`allSeasons_${hashStringMd5('allSeasons')}`,
);
@ -172,12 +175,13 @@ export default class DirectoryController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(`${urls.BASE_JIKAN}season/archive`, {
parse: true,
scrapy: false,
});
}
} catch (err) {
return next(err);
}
@ -190,6 +194,7 @@ export default class DirectoryController {
});
if (archive.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -203,6 +208,7 @@ export default class DirectoryController {
`allSeasons_${hashStringMd5('allSeasons')}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ archive });
} else {
@ -214,6 +220,7 @@ export default class DirectoryController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`laterSeasons_${hashStringMd5('laterSeasons')}`,
);
@ -222,12 +229,13 @@ export default class DirectoryController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(`${urls.BASE_JIKAN}season/later`, {
parse: true,
scrapy: false,
});
}
} catch (err) {
return next(err);
}
@ -241,6 +249,7 @@ export default class DirectoryController {
});
if (future.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -254,6 +263,7 @@ export default class DirectoryController {
`laterSeasons_${hashStringMd5('laterSeasons')}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ future });
} else {
@ -267,6 +277,7 @@ export default class DirectoryController {
let resultAnime: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`moreInfo_${hashStringMd5(title)}`,
);
@ -275,22 +286,26 @@ export default class DirectoryController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
resultQuery = await AnimeModel.findOne({
$or: [{ title: { $eq: title } }, { title: { $eq: `${title} (TV)` } }],
});
const extraInfo: any = await animeExtraInfo(resultQuery!.mal_id);
switch (resultQuery?.source) {
case 'animeflv':
resultAnime = {
title: resultQuery?.title,
poster: resultQuery?.poster,
synopsis: resultQuery?.description,
status: resultQuery?.state,
status: !extraInfo.aired.to ? 'En emisión' : 'Finalizado',
type: resultQuery?.type,
rating: resultQuery?.score,
genres: resultQuery?.genres,
moreInfo: [await animeExtraInfo(resultQuery!.mal_id)],
moreInfo: [extraInfo],
promo: await getAnimeVideoPromo(resultQuery!.mal_id),
characters: await getAnimeCharacters(resultQuery!.mal_id),
related: await getRelatedAnimesFLV(resultQuery!.id),
@ -301,11 +316,11 @@ export default class DirectoryController {
title: resultQuery?.title,
poster: resultQuery?.poster,
synopsis: resultQuery?.description,
status: resultQuery?.state,
status: !extraInfo.aired.to ? 'En emisión' : 'Finalizado',
type: resultQuery?.type,
rating: resultQuery?.score,
genres: resultQuery?.genres,
moreInfo: [await animeExtraInfo(resultQuery!.mal_id)],
moreInfo: [extraInfo],
promo: await getAnimeVideoPromo(resultQuery!.mal_id),
characters: await getAnimeCharacters(resultQuery!.mal_id),
related: await getRelatedAnimesMAL(resultQuery!.mal_id),
@ -316,11 +331,11 @@ export default class DirectoryController {
title: resultQuery?.title,
poster: resultQuery?.poster,
synopsis: resultQuery?.description,
status: resultQuery?.state,
status: !extraInfo.aired.to ? 'En emisión' : 'Finalizado',
type: resultQuery?.type,
rating: resultQuery?.score,
genres: resultQuery?.genres,
moreInfo: [await animeExtraInfo(resultQuery!.mal_id)],
moreInfo: [extraInfo],
promo: await getAnimeVideoPromo(resultQuery!.mal_id),
characters: await getAnimeCharacters(resultQuery!.mal_id),
related: await getRelatedAnimesMAL(resultQuery!.mal_id),
@ -330,12 +345,12 @@ export default class DirectoryController {
resultAnime = undefined;
break;
}
}
} catch (err) {
return next(err);
}
if (resultAnime) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -349,6 +364,7 @@ export default class DirectoryController {
`moreInfo_${hashStringMd5(title)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json(resultAnime);
} else {

@ -69,6 +69,7 @@ export default class UtilsController {
let feed: CustomFeed & Parser.Output<CustomItem>;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`anitakume_${hashStringMd5('anitakume')}`,
);
@ -77,9 +78,10 @@ export default class UtilsController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
feed = await parser.parseURL(urls.BASE_IVOOX);
}
}
feed = await parser.parseURL(urls.BASE_IVOOX);
} catch (err) {
return next(err);
}
@ -116,6 +118,7 @@ export default class UtilsController {
});
if (podcast.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -129,6 +132,7 @@ export default class UtilsController {
`anitakume_${hashStringMd5('anitakume')}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ podcast });
} else {
@ -153,6 +157,7 @@ export default class UtilsController {
];
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`news_${hashStringMd5('news')}`,
);
@ -161,7 +166,9 @@ export default class UtilsController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
for (const rssPage of pagesRss) {
const feed = await parser.parseURL(rssPage.url);
@ -179,12 +186,12 @@ export default class UtilsController {
news.push(formattedObject);
});
}
}
} catch (err) {
return next(err);
}
if (news.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -198,6 +205,7 @@ export default class UtilsController {
`news_${hashStringMd5('news')}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ news });
} else {
@ -210,6 +218,7 @@ export default class UtilsController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`images_${hashStringMd5(title)}`,
);
@ -218,12 +227,13 @@ export default class UtilsController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(
`${urls.BASE_QWANT}count=51&q=${title}&t=images&safesearch=1&locale=es_ES&uiv=4`,
{ scrapy: false, parse: true },
);
}
} catch (err) {
return next(err);
}
@ -237,6 +247,7 @@ export default class UtilsController {
});
if (results.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -250,6 +261,7 @@ export default class UtilsController {
`images_${hashStringMd5(title)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ images: results });
} else {
@ -262,6 +274,7 @@ export default class UtilsController {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`videos_${hashStringMd5(channelId)}`,
);
@ -270,12 +283,13 @@ export default class UtilsController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
data = await requestGot(
`${urls.BASE_YOUTUBE}${channelId}&part=snippet,id&order=date&maxResults=50`,
{ scrapy: false, parse: true },
);
}
} catch (err) {
return next(err);
}
@ -291,6 +305,7 @@ export default class UtilsController {
});
if (results.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -304,6 +319,7 @@ export default class UtilsController {
`videos_${hashStringMd5(channelId)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ videos: results });
} else {
@ -442,6 +458,7 @@ export default class UtilsController {
let themes: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`oped_${hashStringMd5(title)}`,
);
@ -450,14 +467,16 @@ export default class UtilsController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
themes = await structureThemes(await themeParser.serie(title), true);
}
}
themes = await structureThemes(await themeParser.serie(title), true);
} catch (err) {
return next(err);
}
if (themes) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -471,6 +490,7 @@ export default class UtilsController {
`oped_${hashStringMd5(title)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
res.status(200).json({ themes });
} else {
@ -484,6 +504,7 @@ export default class UtilsController {
let resultQueryRedis: any;
try {
if (redisClient.connected) {
if (year) {
resultQueryRedis = await redisClient.get(
`themesyear_${hashStringMd5(year)}`,
@ -498,18 +519,20 @@ export default class UtilsController {
const resultRedis: any = JSON.parse(resultQueryRedis);
return res.status(200).json(resultRedis);
} else {
}
}
if (year === undefined) {
themes = await themeParser.allYears();
} else {
themes = await structureThemes(await themeParser.year(year), false);
}
}
} catch (err) {
return next(err);
}
if (themes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
if (year) {
@ -537,6 +560,7 @@ export default class UtilsController {
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
}
res.status(200).json({ themes });
} else {

@ -40,8 +40,30 @@ export const redisClient: RedisClient = redis.createClient({
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT!),
password: process.env.REDIS_PASSWORD,
retry_strategy: function (options) {
if (options.error && options.error.code === 'ECONNREFUSED') {
// End reconnecting on a specific error and flush all commands with
// a individual error
return new Error('The server refused the connection');
}
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return undefined;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
},
});
redisClient.on('connect', () => {
console.log('Redis connected: redis.');
});
redisClient.on('error', function (err) {
console.log('Redis error: ' + err);
});

@ -12,7 +12,6 @@ export interface Anime extends Document {
poster: string;
type: string;
genres: Types.Array<string>;
state: string;
score: string;
source: string;
description: string;
@ -26,7 +25,6 @@ const AnimeSchema: Schema = new Schema({
poster: { type: String },
type: { type: String },
genres: [{ type: String }],
state: { type: String },
score: { type: String },
source: { type: String },
description: { type: String },

@ -56,6 +56,7 @@ export const animeExtraInfo = async (mal_id: number) => {
};
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`extraInfo_${hashStringMd5(`${mal_id}`)}`,
);
@ -64,14 +65,15 @@ export const animeExtraInfo = async (mal_id: number) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}`, {
parse: true,
scrapy: false,
});
broadcast = data.broadcast.split('at')[0].trim().toLowerCase() || null;
}
} catch (err) {
return err;
}
@ -101,6 +103,7 @@ export const animeExtraInfo = async (mal_id: number) => {
};
if (formattedObject) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -114,6 +117,7 @@ export const animeExtraInfo = async (mal_id: number) => {
`extraInfo_${hashStringMd5(`${mal_id}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return formattedObject;
} else {
@ -125,6 +129,7 @@ export const getAnimeVideoPromo = async (mal_id: number) => {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`promoInfo_${hashStringMd5(`${mal_id}`)}`,
);
@ -133,12 +138,13 @@ export const getAnimeVideoPromo = async (mal_id: number) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}/videos`, {
parse: true,
scrapy: false,
});
}
} catch (err) {
return err;
}
@ -152,6 +158,7 @@ export const getAnimeVideoPromo = async (mal_id: number) => {
});
if (promo.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -165,6 +172,7 @@ export const getAnimeVideoPromo = async (mal_id: number) => {
`promoInfo_${hashStringMd5(`${mal_id}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return promo;
} else {
@ -176,6 +184,7 @@ export const getAnimeCharacters = async (mal_id: number) => {
let data: any;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`charactersInfo_${hashStringMd5(`${mal_id}`)}`,
);
@ -184,12 +193,13 @@ export const getAnimeCharacters = async (mal_id: number) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
data = await requestGot(
`${urls.BASE_JIKAN}anime/${mal_id}/characters_staff`,
{ parse: true, scrapy: false },
);
}
} catch (err) {
return err;
}
@ -204,6 +214,7 @@ export const getAnimeCharacters = async (mal_id: number) => {
});
if (characters.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -217,6 +228,7 @@ export const getAnimeCharacters = async (mal_id: number) => {
`charactersInfo_${hashStringMd5(`${mal_id}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return characters;
} else {
@ -251,6 +263,7 @@ export const getRelatedAnimesFLV = async (id: string) => {
let $: cheerio.Root;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`relatedFLV_${hashStringMd5(id)}`,
);
@ -259,12 +272,13 @@ export const getRelatedAnimesFLV = async (id: string) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
$ = await requestGot(`${urls.BASE_ANIMEFLV}/anime/${id}`, {
parse: false,
scrapy: true,
});
}
} catch (err) {
return err;
}
@ -292,6 +306,7 @@ export const getRelatedAnimesFLV = async (id: string) => {
}
if (relatedAnimes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -305,6 +320,7 @@ export const getRelatedAnimesFLV = async (id: string) => {
`relatedFLV_${hashStringMd5(id)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return relatedAnimes;
} else {
@ -316,6 +332,7 @@ export const getRelatedAnimesMAL = async (mal_id: number) => {
let $: cheerio.Root;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`getRelatedMAL_${hashStringMd5(`${mal_id}`)}`,
);
@ -324,12 +341,13 @@ export const getRelatedAnimesMAL = async (mal_id: number) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
$ = await requestGot(`https://myanimelist.net/anime/${mal_id}`, {
parse: false,
scrapy: true,
});
}
} catch (err) {
return err;
}
@ -365,6 +383,7 @@ export const getRelatedAnimesMAL = async (mal_id: number) => {
}
if (relatedAnimes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -378,6 +397,7 @@ export const getRelatedAnimesMAL = async (mal_id: number) => {
`getRelatedMAL_${hashStringMd5(`${mal_id}`)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return relatedAnimes;
}
@ -394,6 +414,7 @@ export const animeFlvInfo = async (id: string | undefined) => {
let episodes: any[] = [];
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`animeflvInfo_${hashStringMd5(id!)}`,
);
@ -402,12 +423,13 @@ export const animeFlvInfo = async (id: string | undefined) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
$ = await requestGot(`${urls.BASE_ANIMEFLV}/anime/${id}`, {
scrapy: true,
parse: false,
});
}
} catch (err) {
return err;
}
@ -442,6 +464,7 @@ export const animeFlvInfo = async (id: string | undefined) => {
}
if (episodes.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -455,6 +478,7 @@ export const animeFlvInfo = async (id: string | undefined) => {
`animeflvInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return episodes;
} else {
@ -470,6 +494,7 @@ export const jkanimeInfo = async (id: string | undefined) => {
let countEpisodes: string[] = [];
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`jkanimeInfo_${hashStringMd5(id!)}`,
);
@ -478,12 +503,13 @@ export const jkanimeInfo = async (id: string | undefined) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
$ = await requestGot(`${urls.BASE_JKANIME}${id}`, {
scrapy: true,
parse: false,
});
}
} catch (err) {
return err;
}
@ -510,6 +536,7 @@ export const jkanimeInfo = async (id: string | undefined) => {
}
if (episodesList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -523,6 +550,7 @@ export const jkanimeInfo = async (id: string | undefined) => {
`jkanimeInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return episodesList;
} else {
@ -530,11 +558,19 @@ export const jkanimeInfo = async (id: string | undefined) => {
}
};
export const monoschinosInfo = async (id: string | undefined) => {
export const monoschinosInfo = async (
id: string | undefined,
mal_id: number,
) => {
let $: cheerio.Root;
let episodeList: any[] = [];
let extraInfo: any;
try {
/* Extra info of the anime */
extraInfo = await animeExtraInfo(mal_id);
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`monoschinosInfo_${hashStringMd5(id!)}`,
);
@ -543,16 +579,69 @@ export const monoschinosInfo = async (id: string | undefined) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
$ = await requestGot(`${urls.BASE_MONOSCHINOS}anime/${id}`, {
scrapy: true,
parse: false,
});
}
} catch (err) {
return err;
}
let broadCastDate = new Date();
let dd: number, mm: string | number, yyyy: number;
const airDay: any = {
Lunes: 1,
Martes: 2,
Miércoles: 3,
Jueves: 4,
Viernes: 5,
Sábados: 6,
Domingos: 7,
'Sin emisión': 'default',
};
if (!extraInfo.aired.to) {
if (airDay.hasOwnProperty(extraInfo.broadcast)) {
if (broadCastDate.getDay() < airDay[extraInfo.broadcast]) {
for (
let i = broadCastDate.getDay();
i < airDay[extraInfo.broadcast];
i++
) {
broadCastDate.setDate(broadCastDate.getDate() + 1);
}
} else {
let counter = broadCastDate.getDay() + 1;
/* Adding one because of the day */
broadCastDate.setDate(broadCastDate.getDate() + 1);
while (counter !== airDay[extraInfo.broadcast]) {
if (counter === 7) {
counter = 0;
}
broadCastDate.setDate(broadCastDate.getDate() + 1);
counter++;
}
}
dd = broadCastDate.getDate();
mm =
broadCastDate.getMonth() + 1 < 10
? `0${broadCastDate.getMonth() + 1}`
: broadCastDate.getMonth() + 1;
yyyy = broadCastDate.getFullYear();
episodeList.push({
nextEpisodeDate: `${yyyy}-${mm}-${dd}`,
});
}
}
$('.SerieCaps a').each((index: number, element: cheerio.Element) => {
let episode: number;
@ -574,6 +663,7 @@ export const monoschinosInfo = async (id: string | undefined) => {
});
if (episodeList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -587,6 +677,7 @@ export const monoschinosInfo = async (id: string | undefined) => {
`monoschinosInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return episodeList;
} else {
@ -599,6 +690,7 @@ export const videoServersMonosChinos = async (id: string) => {
let videoServers: any[] = [];
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`videoServersMonosChinos_${hashStringMd5(id)}`,
);
@ -607,12 +699,13 @@ export const videoServersMonosChinos = async (id: string) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
$ = await requestGot(`${urls.BASE_MONOSCHINOS}${id}`, {
scrapy: true,
parse: false,
});
}
} catch (err) {
return err;
}
@ -656,6 +749,7 @@ export const videoServersMonosChinos = async (id: string) => {
});
if (videoServers.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -669,6 +763,7 @@ export const videoServersMonosChinos = async (id: string) => {
`videoServersMonosChinos_${hashStringMd5(id)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return videoServers;
} else {
@ -682,6 +777,7 @@ export const videoServersJK = async (id: string) => {
let script: string | null = '';
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`videoServersJK_${hashStringMd5(id)}`,
);
@ -690,12 +786,13 @@ export const videoServersJK = async (id: string) => {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
}
}
$ = await requestGot(`${urls.BASE_JKANIME}${id}`, {
scrapy: true,
parse: false,
});
}
} catch (err) {
return err;
}
@ -748,6 +845,7 @@ export const videoServersJK = async (id: string) => {
serverList = serverList.filter(x => x.id !== 'xtreme s' && x.id !== 'desuka');
if (serverList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -761,6 +859,7 @@ export const videoServersJK = async (id: string) => {
`videoServersJK_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return serverList;
} else {
@ -772,6 +871,7 @@ async function desuServerUrl(url: string) {
let $: cheerio.Root;
try {
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`desuServerUrl_${hashStringMd5(url)}`,
);
@ -780,9 +880,10 @@ async function desuServerUrl(url: string) {
const resultRedis: any = JSON.parse(resultQueryRedis);
return resultRedis;
} else {
$ = await requestGot(url, { scrapy: true, parse: false });
}
}
$ = await requestGot(url, { scrapy: true, parse: false });
} catch (err) {
return err;
}
@ -805,6 +906,7 @@ async function desuServerUrl(url: string) {
.split("'")[1];
if (result.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
@ -818,6 +920,7 @@ async function desuServerUrl(url: string) {
`desuServerUrl_${hashStringMd5(url)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return result;
} else {

Loading…
Cancel
Save