Merge pull request #46 from aruppi/develop

pull/49/head
Guillermo Rivas 4 years ago committed by GitHub
commit b529f6f13a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,32 @@
module.exports = {
env: {
browser: true,
commonjs: true,
node: true,
},
extends: ['prettier', 'eslint:recommended'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
jsx: false,
},
},
plugins: ['@typescript-eslint/eslint-plugin'],
rules: {
'no-underscore-dangle': 'off',
'class-methods-use-this': 'off',
camelcase: 'off',
'no-unused-vars': 'warn',
'no-undef': 'warn',
},
settings: {
'import/resolver': {
node: {
extensions: ['.ts'],
typescript: {},
},
},
},
};

@ -1,47 +0,0 @@
{
"env": {
"browser": true,
"commonjs": true,
"es2021": true,
"node": true
},
"extends": [
"airbnb-base",
"plugin:@typescript-eslint/recommended",
"prettier/@typescript-eslint",
"plugin:prettier/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
},
"plugins": ["@typescript-eslint", "prettier"],
"rules": {
"no-underscore-dangle": "off",
"prettier/prettier": "error",
"class-methods-use-this": "off",
"camelcase": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{
"argsIgnorePattern": "^_"
}
],
"import/extensions": [
"error",
"ignorePackages",
{
"ts": "never"
}
]
},
"settings": {
"import/resolver": {
"node": {
"extensions": [".ts"],
"typescript": {}
}
}
}
}

@ -0,0 +1,5 @@
module.exports = {
singleQuote: true,
trailingComma: 'all',
arrowParens: 'avoid',
};

@ -1,5 +0,0 @@
{
"singleQuote": true,
"trailingComma": "all",
"arrowParens": "avoid"
}

@ -1,4 +1,4 @@
# **Aruppi API** (v4.0.6)
# **Aruppi API** (v4.0.7)
> This API has everything about Japan, from anime, music, radio, images, videos ... to japanese culture
>

@ -1,6 +1,6 @@
{
"name": "aruppi",
"version": "4.0.6",
"version": "4.0.7",
"description": "Aruppi is a custom API to obtain data from the Japanese culture for the mobile app",
"main": "./src/api/api.ts",
"scripts": {
@ -50,37 +50,35 @@
"license": "MIT",
"dependencies": {
"body-parser": "^1.19.0",
"cheerio": "^1.0.0-rc.5",
"cheerio": "^1.0.0-rc.6",
"compose-middleware": "^5.0.1",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"got": "^11.8.1",
"helmet": "^4.4.1",
"mongodb": "^3.6.4",
"mongoose": "^5.11.18",
"redis": "^3.0.2",
"got": "^11.8.2",
"helmet": "^4.5.0",
"mongodb": "^3.6.6",
"mongoose": "^5.12.5",
"redis": "^3.1.2",
"rss-parser": "^3.12.0",
"tough-cookie": "^4.0.0",
"ts-node-dev": "^1.1.1"
},
"devDependencies": {
"@types/cheerio": "^0.22.24",
"@types/cheerio": "^0.22.28",
"@types/cors": "^2.8.10",
"@types/express": "^4.17.11",
"@types/node": "^14.14.31",
"@types/node": "^14.14.41",
"@types/redis": "^2.8.28",
"@types/tough-cookie": "^4.0.0",
"@typescript-eslint/eslint-plugin": "^4.15.2",
"@typescript-eslint/parser": "^4.15.2",
"eslint": "^5.16.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-prettier": "^8.0.0",
"eslint-import-resolver-typescript": "^2.4.0",
"@typescript-eslint/eslint-plugin": "^4.22.0",
"@typescript-eslint/parser": "^4.22.0",
"eslint": "^7.24.0",
"eslint-config-prettier": "^8.2.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-prettier": "^3.4.0",
"prettier": "^2.2.1",
"ts-node": "^9.1.1",
"typescript": "^4.2.3"
"typescript": "^4.2.4"
}
}

@ -752,9 +752,6 @@ export default class AnimeController {
data = await videoServersJK(id);
}
switch (id) {
}
if (data) {
if (redisClient.connected) {
/* Set the key in the redis cache. */

@ -1,7 +1,6 @@
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 util from 'util';
import { hashStringMd5 } from '../utils/util';
import {
@ -413,6 +412,7 @@ export default class DirectoryController {
if (genre === undefined && order === undefined && page === undefined) {
result = await AnimeModel.aggregate([{ $sample: { size: 25 } }]);
} else {
// eslint-disable-next-line no-prototype-builtins
if (genres.hasOwnProperty(genre)) {
if (page !== undefined && parseInt(page) > 1) {
if (order === 'asc') {

@ -26,7 +26,7 @@ routes.get('/api/v4/', (req: Request, res: Response) => {
res.json({
message: 'Aruppi /api - 🎏',
author: 'Jéluchu',
version: '4.0.6',
version: '4.0.7',
credits: 'The bitch loves /apis that offers data to Aruppi App',
entries: [
{

@ -344,9 +344,6 @@ export const jkanimeInfo = async (id: string | undefined, mal_id: number) => {
let countEpisodes: string[] = [];
try {
/* Extra info of the anime */
extraInfo = await animeExtraInfo(mal_id);
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`jkanimeInfo_${hashStringMd5(id!)}`,
@ -363,99 +360,108 @@ export const jkanimeInfo = async (id: string | undefined, mal_id: number) => {
scrapy: true,
parse: false,
});
/* Extra info of the anime */
extraInfo = (await animeExtraInfo(mal_id)) || undefined;
} catch (err) {
return err;
console.log(err);
}
countEpisodes = $('div.anime__pagination a')
.map((index: number, element: cheerio.Element) => {
return $(element).text();
})
.get();
const episodesCount: string = countEpisodes[countEpisodes.length - 1].split(
'-',
)[1];
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;
if ($!) {
countEpisodes = $!('div.anime__pagination a')
.map((index: number, element: cheerio.Element) => {
return $!(element).text();
})
.get();
const episodesCount: string = countEpisodes[countEpisodes.length - 1].split(
'-',
)[1];
if (extraInfo) {
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++;
}
}
/* Adding one because of the day */
broadCastDate.setDate(broadCastDate.getDate() + 1);
dd = broadCastDate.getDate();
mm =
broadCastDate.getMonth() + 1 < 10
? `0${broadCastDate.getMonth() + 1}`
: broadCastDate.getMonth() + 1;
yyyy = broadCastDate.getFullYear();
while (counter !== airDay[extraInfo.broadcast]) {
if (counter === 7) {
counter = 0;
}
broadCastDate.setDate(broadCastDate.getDate() + 1);
counter++;
episodesList.push({
nextEpisodeDate: `${yyyy}-${mm}-${dd}`,
});
}
}
}
dd = broadCastDate.getDate();
mm =
broadCastDate.getMonth() + 1 < 10
? `0${broadCastDate.getMonth() + 1}`
: broadCastDate.getMonth() + 1;
yyyy = broadCastDate.getFullYear();
for (let i = 1; i <= parseInt(episodesCount); i++) {
episodesList.push({
nextEpisodeDate: `${yyyy}-${mm}-${dd}`,
episode: i,
id: `${id}/${i}`,
});
}
}
for (let i = 1; i <= parseInt(episodesCount); i++) {
episodesList.push({
episode: i,
id: `${id}/${i}`,
});
}
if (episodesList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
if (episodesList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
`jkanimeInfo_${hashStringMd5(id!)}`,
JSON.stringify(episodesList),
);
redisClient.set(
`jkanimeInfo_${hashStringMd5(id!)}`,
JSON.stringify(episodesList),
);
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient.expireat(
`jkanimeInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
redisClient.expireat(
`jkanimeInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
return episodesList;
} else {
return undefined;
}
return episodesList;
} else {
return null;
return undefined;
}
};
@ -468,9 +474,6 @@ export const monoschinosInfo = async (
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!)}`,
@ -487,102 +490,111 @@ export const monoschinosInfo = async (
scrapy: true,
parse: false,
});
/* Extra info of the anime */
extraInfo = (await animeExtraInfo(mal_id)) || undefined;
} catch (err) {
return err;
console.log(err);
}
let broadCastDate = new Date();
let dd: number, mm: string | number, yyyy: number;
if ($!) {
if (extraInfo) {
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++;
}
}
const airDay: any = {
Lunes: 1,
Martes: 2,
Miércoles: 3,
Jueves: 4,
Viernes: 5,
Sábados: 6,
Domingos: 7,
'Sin emisión': 'default',
};
dd = broadCastDate.getDate();
mm =
broadCastDate.getMonth() + 1 < 10
? `0${broadCastDate.getMonth() + 1}`
: broadCastDate.getMonth() + 1;
yyyy = broadCastDate.getFullYear();
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);
episodeList.push({
nextEpisodeDate: `${yyyy}-${mm}-${dd}`,
});
}
} else {
let counter = broadCastDate.getDay() + 1;
}
}
/* Adding one because of the day */
broadCastDate.setDate(broadCastDate.getDate() + 1);
$!('.SerieCaps a').each((index: number, element: cheerio.Element) => {
let episode: number;
while (counter !== airDay[extraInfo.broadcast]) {
if (counter === 7) {
counter = 0;
$(element)
.attr('href')
?.split('-')
.forEach((item: any) => {
if (!isNaN(item)) {
episode = parseInt(item);
}
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;
$(element)
.attr('href')
?.split('-')
.forEach((item: any) => {
if (!isNaN(item)) {
episode = parseInt(item);
}
episode: episode!,
id: `${$(element).attr('href')?.split('/')[3]}/${
$(element).attr('href')?.split('/')[4]
}`,
});
episodeList.push({
episode: episode!,
id: `${$(element).attr('href')?.split('/')[3]}/${
$(element).attr('href')?.split('/')[4]
}`,
});
});
if (episodeList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
if (episodeList.length > 0) {
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
`monoschinosInfo_${hashStringMd5(id!)}`,
JSON.stringify(episodeList),
);
redisClient.set(
`monoschinosInfo_${hashStringMd5(id!)}`,
JSON.stringify(episodeList),
);
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient.expireat(
`monoschinosInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
redisClient.expireat(
`monoschinosInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
return episodeList;
return episodeList;
} else {
return undefined;
}
} else {
return null;
return undefined;
}
};
@ -593,9 +605,6 @@ export const tioanimeInfo = async (id: string | undefined, mal_id: number) => {
let extraInfo: any;
try {
/* Extra info of the anime */
extraInfo = await animeExtraInfo(mal_id);
if (redisClient.connected) {
const resultQueryRedis: any = await redisClient.get(
`tioanimeInfo_${hashStringMd5(id!)}`,
@ -612,96 +621,105 @@ export const tioanimeInfo = async (id: string | undefined, mal_id: number) => {
scrapy: true,
parse: false,
});
/* Extra info of the anime */
extraInfo = (await animeExtraInfo(mal_id)) || undefined;
} catch (err) {
return err;
console.log(err);
}
let broadCastDate = new Date();
let dd: number, mm: string | number, yyyy: number;
if ($!) {
if (extraInfo) {
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++;
}
}
const airDay: any = {
Lunes: 1,
Martes: 2,
Miércoles: 3,
Jueves: 4,
Viernes: 5,
Sábados: 6,
Domingos: 7,
'Sin emisión': 'default',
};
dd = broadCastDate.getDate();
mm =
broadCastDate.getMonth() + 1 < 10
? `0${broadCastDate.getMonth() + 1}`
: broadCastDate.getMonth() + 1;
yyyy = broadCastDate.getFullYear();
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);
episodesList.push({
nextEpisodeDate: `${yyyy}-${mm}-${dd}`,
});
}
} else {
let counter = broadCastDate.getDay() + 1;
}
}
/* Adding one because of the day */
broadCastDate.setDate(broadCastDate.getDate() + 1);
const scripts: cheerio.Element[] = $!('script').toArray();
while (counter !== airDay[extraInfo.broadcast]) {
if (counter === 7) {
counter = 0;
}
broadCastDate.setDate(broadCastDate.getDate() + 1);
counter++;
}
for (const script of scripts) {
if ($!(script).html()!.includes('anime_info')) {
anime_eps = JSON.parse(
$!(script).html()!.split('var episodes = ')[1].split(';')[0],
);
}
}
dd = broadCastDate.getDate();
mm =
broadCastDate.getMonth() + 1 < 10
? `0${broadCastDate.getMonth() + 1}`
: broadCastDate.getMonth() + 1;
yyyy = broadCastDate.getFullYear();
for (const episode of anime_eps) {
episodesList.push({
nextEpisodeDate: `${yyyy}-${mm}-${dd}`,
episode: episode,
id: `ver/${id}-${episode}`,
});
}
}
const scripts: cheerio.Element[] = $('script').toArray();
if (redisClient.connected) {
/* Set the key in the redis cache. */
for (const script of scripts) {
if ($(script).html()!.includes('anime_info')) {
anime_eps = JSON.parse(
$(script).html()!.split('var episodes = ')[1].split(';')[0],
redisClient.set(
`tioanimeInfo_${hashStringMd5(id!)}`,
JSON.stringify(episodesList),
);
}
}
for (const episode of anime_eps) {
episodesList.push({
episode: episode,
id: `ver/${id}-${episode}`,
});
}
if (redisClient.connected) {
/* Set the key in the redis cache. */
redisClient.set(
`tioanimeInfo_${hashStringMd5(id!)}`,
JSON.stringify(episodesList),
);
/* After 24hrs expire the key. */
/* After 24hrs expire the key. */
redisClient.expireat(
`tioanimeInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
}
redisClient.expireat(
`tioanimeInfo_${hashStringMd5(id!)}`,
parseInt(`${+new Date() / 1000}`, 10) + 7200,
);
return episodesList;
} else {
return undefined;
}
return episodesList;
};
export const videoServersMonosChinos = async (id: string) => {

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save