🟨 => 🟦 migrating all controllers from js to ts

master
carlos-burelo 3 years ago
parent f04d83a53e
commit e304321470

@ -1,23 +0,0 @@
import { parse } from 'node-html-parser';
import { attr, api, get } from '../config.js';
export async function getAnimes(req, res) {
try {
let { page = '1' } = req.params;
const { data } = await get(`${api.all(page)}`);
const html = parse(data);
res.status(200).json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map((i) => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles').text.trim() || null,
image: attr(i, '.animemainimg', 'src') || null,
};
})
);
} catch (err) {
res.status(500).json({
message: err.message,
});
}
}

@ -0,0 +1,21 @@
import { Controller } from '../types'
import { get, parse, attr, api } from '../api'
export const getAll: Controller = async (req, res) => {
try {
const { page = '1' } = req.query
const { data } = await get(api.all(page))
const html = parse(data)
res.status(200).json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map(i => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles')?.text.trim() || null,
image: attr(i, '.animemainimg', 'src') || null,
}
})
)
} catch (error) {
res.status(500).json({ error })
}
}

@ -1,41 +0,0 @@
import { attr, api, get } from '../config.js';
import { parse } from 'node-html-parser';
export async function getAnime(req, res) {
try {
const url = 'https://monoschinos2.com/';
const { id } = req.params;
const { data } = await get(api.anime(id));
const html = parse(data);
const date = html.querySelectorAll('.breadcrumb')[1].querySelector('.breadcrumb-item').text;
res.status(200).json({
banner: attr(html, '.herobg img', 'src'),
image: attr(html, '.chapterpic img', 'src'),
title:
html
.querySelector('.chapterdetails h1')
.text.replace(/Sub Español/gi, '')
.trim() || null,
titleAlt: html.querySelector('.alterno').text || null,
sinopsis: html.querySelector('.textComplete').text.replace('Ver menos', '') || null,
status: html.querySelector('#btninfo').text.trim() || null,
rating: html.querySelector('.chapterpic p').text || null,
genders: html.querySelectorAll('.breadcrumb .breadcrumb-item a').map((g) => g.text) || null,
date: date || null,
episodes:
html.querySelectorAll('.row.jpage.row-cols-md-6 .col-item a').map((cap) => {
const epId = cap.attributes['href'].replace(`${url}ver/`, '');
return {
image: attr(cap, '.animeimghv', 'data-src'),
no: parseInt(epId.split('-').pop()),
id: epId,
};
}) || null,
});
} catch (error) {
res.status(500).json({
id: 'intertal-server-error',
message: error.message,
});
}
}

@ -0,0 +1,39 @@
import { attr, api, get, parse } from '../api'
import { Controller } from '../types.js'
export const getAnime: Controller = async (req, res) => {
try {
const url = 'https://monoschinos2.com/'
const { id } = req.params
const { data } = await get(api.anime(id))
const html = parse(data)
const date = html.querySelectorAll('.breadcrumb')[1].querySelector('.breadcrumb-item')?.text
res.status(200).json({
banner: attr(html, '.herobg img', 'src'),
image: attr(html, '.chapterpic img', 'src'),
title:
html
.querySelector('.chapterdetails h1')
?.text.replace(/Sub Español/gi, '')
.trim() || null,
titleAlt: html.querySelector('.alterno')?.text || null,
sinopsis: html.querySelector('.textComplete')?.text.replace('Ver menos', '') || null,
status: html.querySelector('#btninfo')?.text.trim() || null,
rating: html.querySelector('.chapterpic p')?.text || null,
genders: html.querySelectorAll('.breadcrumb .breadcrumb-item a').map(g => g.text) || null,
date: date || null,
episodes:
html.querySelectorAll('.row.jpage.row-cols-md-6 .col-item a').map(cap => {
const epId = cap.attributes['href'].replace(`${url}ver/`, '')
return {
image: attr(cap, '.animeimghv', 'data-src'),
no: parseInt(epId.split('-').pop() as string),
id: epId,
}
}) || null,
})
} catch (error) {
res.status(500).json({ error })
}
}

@ -1,26 +0,0 @@
import { parse } from 'node-html-parser';
import { attr, api, get } from '../config.js';
export async function getCalendar(req, res) {
try {
const { data } = await get(api.calendar);
const html = parse(data);
res.status(200).json(
html.querySelectorAll('.heromain [data-dia]').map((i) => {
const day = i.getAttribute('data-dia');
return {
day,
animes: i.querySelectorAll('.col-md-6.col-lg-4.col-sm-12.for768').map((i) => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.serisdtls a h3').text.trim() || null,
image: attr(i, '.seriesimg a img') || null,
};
}),
};
})
);
} catch (error) {
res.status(500).json({ message: error.message });
}
}

@ -0,0 +1,30 @@
import { attr, api, get, parse } from '../api'
import { Controller } from '../types'
export const getCalendar: Controller = async (req, res) => {
try {
const { data } = await get(api.calendar)
const html = parse(data)
res.status(200).json(
html.querySelectorAll('.heromain [data-dia]').map(i => {
const day = i.getAttribute('data-dia')
return {
day,
animes: i.querySelectorAll('.col-md-6.col-lg-4.col-sm-12.for768').map(i => {
const no = i.querySelector('.serisdtls a h4')?.text.trim()
const tags = i.querySelectorAll('.serisdtls .seriesbtns a')
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.serisdtls a h3')?.text.trim() || null,
image: attr(i, '.seriesimg a img') || null,
tags: tags.map(i => i.querySelector('button')?.text.trim() || null),
no: parseInt(no?.replace(/\w+\s/, '') as string) || null,
}
}),
}
})
)
} catch (error) {
res.status(500).json({ error })
}
}

@ -1,21 +0,0 @@
import { attr, api, get } from '../config.js';
import { parse } from 'node-html-parser';
export async function getEmision(req, res) {
try {
let { page = '1' } = req.query;
const { data } = await get(api.emision(page));
const html = parse(data);
res.status(200).json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map((i) => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles').text.trim() || null,
image: attr(i, '.animemainimg') || null,
};
})
);
} catch (error) {
res.status(500).json({ message: error.message });
}
}

@ -0,0 +1,21 @@
import { attr, api, get, parse } from '../api'
import { Controller } from '../types'
export const getEmision: Controller = async (req, res) => {
try {
const { page = '1' } = req.query
const { data } = await get(api.emision(page))
const html = parse(data)
res.status(200).json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map(i => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles')?.text.trim() || null,
image: attr(i, '.animemainimg') || null,
}
})
)
} catch (error) {
res.status(500).json({ error })
}
}

@ -1,65 +0,0 @@
import { attr, api, get } from '../config.js';
import { parse } from 'node-html-parser';
export async function getEpisode(req, res) {
try {
const { id } = req.params;
const { data } = await get(api.episode(id));
const html = parse(data);
const ctrls = html.querySelectorAll('.controldiv2 a');
let nav = {};
let mapc = ctrls.map((e, i) => {
let elem = e.querySelector('img').classList;
return !elem.contains('playlist');
});
if (mapc.length == 3) {
nav = { next: true, prev: true };
} else {
if (mapc[1] == true) nav = { next: true, prev: false };
if (mapc[1] == false) nav = { next: false, prev: true };
}
const nextEpisodes = html.querySelectorAll('.nextplay:nth-child(1) .nextplays a').map((i) => {
return {
image: attr(i, '.nxtmainimg', 'src'),
date: i.querySelector('.nxtplaybtn p').text,
title: i.querySelector('.nxtplaybtn h5').text,
no: i.querySelector('.nxtplaybtn span').text,
};
});
const imgNotFound =
'https://konachan.com/image/bbb46f65d3130526c20fcd781d6800cf/Konachan.com%20-%2041974%20fuura_kafuka%20itoshiki_nozomu%20sayonara_zetsubou_sensei%20white.png';
res.json({
title: html.querySelector('.heromain_h1').text.replace(/Sub\sEspañol/gi, ''),
nextEpisodes: nextEpisodes.length == 0 ? null : nextEpisodes,
ctrs: nav,
sugestions: html.querySelectorAll('.nextplay:nth-child(3) .nextplays a').map((i) => {
const image = attr(i, '.nxtmainimg', 'src');
return {
image: image.length == 0 || !image ? imgNotFound : image,
date: i.querySelector('.nxtplaybtn p').text,
title: i.querySelector('.nxtplaybtn h5').text,
no: i.querySelector('.nxtplaybtn span').text,
};
}),
videos: html.querySelectorAll('.dropcaps .play-video').map((i) => {
const base64 = i.attrs['data-player'];
const title = i.rawText;
return {
title,
url: Buffer.from(base64, 'base64').toString('ascii'),
};
}),
downloads: html.querySelectorAll('.downbtns a').map((i) => {
return {
title: i.text,
url: i.attrs['href'],
};
}),
});
} catch (err) {
res.status(500).json({
message: err.message,
});
}
}

@ -0,0 +1,62 @@
import { attr, api, get, parse } from '../api'
import { Controller } from '../types'
export const getEpisode: Controller = async (req, res) => {
try {
const { id } = req.params
const { data } = await get(api.episode(id))
const html = parse(data)
const ctrls = html.querySelectorAll('.controldiv2 a')
let nav = {}
let mapc = ctrls.map((e, i) => {
let elem = e.querySelector('img')?.classList
return !elem?.contains('playlist')
})
if (mapc.length == 3) {
nav = { next: true, prev: true }
} else {
if (mapc[1] == true) nav = { next: true, prev: false }
if (mapc[1] == false) nav = { next: false, prev: true }
}
const nextEpisodes = html.querySelectorAll('.nextplay:nth-child(1) .nextplays a').map(i => {
return {
image: attr(i, '.nxtmainimg', 'src'),
date: i.querySelector('.nxtplaybtn p')?.text,
title: i.querySelector('.nxtplaybtn h5')?.text,
no: i.querySelector('.nxtplaybtn span')?.text,
}
})
const imgNotFound =
'https://konachan.com/image/bbb46f65d3130526c20fcd781d6800cf/Konachan.com%20-%2041974%20fuura_kafuka%20itoshiki_nozomu%20sayonara_zetsubou_sensei%20white.png'
res.json({
title: html.querySelector('.heromain_h1')?.text.replace(/Sub\sEspañol/gi, ''),
nextEpisodes: nextEpisodes.length == 0 ? null : nextEpisodes,
ctrs: nav,
sugestions: html.querySelectorAll('.nextplay:nth-child(3) .nextplays a').map(i => {
const image = attr(i, '.nxtmainimg', 'src')
return {
image: image.length == 0 || !image ? imgNotFound : image,
date: i.querySelector('.nxtplaybtn p')?.text,
title: i.querySelector('.nxtplaybtn h5')?.text,
no: i.querySelector('.nxtplaybtn span')?.text,
}
}),
videos: html.querySelectorAll('.dropcaps .play-video').map(i => {
const base64 = i.attrs['data-player']
const title = i.rawText
return {
title,
url: Buffer.from(base64, 'base64').toString('ascii'),
}
}),
downloads: html.querySelectorAll('.downbtns a').map(i => {
return {
title: i.text,
url: i.attrs['href'],
}
}),
})
} catch (error) {
res.status(500).json({ error })
}
}

@ -1,29 +0,0 @@
import { parse } from 'node-html-parser';
import { api, attr, get } from '../config.js';
export async function filterBy(req, res) {
try {
let {
categoria = 'false',
fecha = 'false',
genero = 'false',
letra = 'false',
pagina = '1',
} = req.query;
const { data } = await get(`${api.filter({ categoria, fecha, genero, letra, pagina })}`);
const html = parse(data);
res.status(200).json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map((i) => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles').text.trim() || null,
image: attr(i, '.animemainimg', 'src') || null,
};
})
);
} catch (err) {
res.status(500).json({
message: err.message,
});
}
}

@ -0,0 +1,27 @@
import { api, attr, get, parse } from '../api'
import { Controller } from '../types'
export const filterBy: Controller = async (req, res) => {
try {
const {
categoria = 'false',
fecha = 'false',
genero = 'false',
letra = 'false',
pagina = '1',
}: { [key: string]: any } = req.query
const { data } = await get(api.filter({ categoria, fecha, genero, letra, pagina }))
const html = parse(data)
res.status(200).json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map(i => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles')?.text.trim() || null,
image: attr(i, '.animemainimg', 'src') || null,
}
})
)
} catch (error) {
res.status(500).json({ error })
}
}

@ -1,8 +0,0 @@
export * from './all.js';
export * from './calendar.js';
export * from './emision.js';
export * from './episode.js';
export * from './filterBy.js';
export * from './lastest.js';
export * from './search.js';
export * from './anime.js';

@ -0,0 +1,8 @@
export * from './all'
export * from './anime'
export * from './lastest'
export * from './calendar'
export * from './emision'
export * from './search'
export * from './episode'
export * from './filterBy'

@ -1,23 +0,0 @@
import { attr, api, get } from '../config.js';
import { parse } from 'node-html-parser';
export async function getLastest(req, res) {
try {
const { data } = await get(api.home);
const html = parse(data);
res.json(
html.querySelectorAll('.row.row-cols-5 .col.col-md-6.col-lg-2.col-6').map((i) => {
const id = attr(i, 'a', 'href').split('/').pop();
return {
id: id || null,
title: i.querySelector('.animetitles')?.text || null,
image: attr(i, '.animeimgdiv img', 'data-src') || null,
type: i.querySelector('.positioning button').text.trim() || null,
no: parseInt(i.querySelector('.positioning h5').text.trim() || '0') || null,
};
})
);
} catch (error) {
res.status(500).json({ message: error.message });
}
}

@ -0,0 +1,23 @@
import { Controller } from '../types'
import { get, parse, attr, url } from '../api'
export const getLastest: Controller = async (req, res) => {
try {
const { data } = await get(url)
const html = parse(data)
res.json(
html.querySelectorAll('.row.row-cols-5 .col.col-md-6.col-lg-2.col-6').map(i => {
const id = attr(i, 'a', 'href').split('/').pop()
return {
id: id || null,
title: i.querySelector('.animetitles')?.text || null,
image: attr(i, '.animeimgdiv img', 'data-src') || null,
type: i.querySelector('.positioning button')?.text.trim() || null,
no: parseInt(i.querySelector('.positioning h5')?.text.trim() || '0') || null,
}
})
)
} catch (error) {
res.status(500).json({ error })
}
}

@ -1,24 +0,0 @@
import { parse } from 'node-html-parser';
import { api, attr, get } from '../config.js';
export async function searchAnime(req, res) {
try {
let { id } = req.params;
let { page = '1' } = req.query;
const { data } = await get(api.search(id, page));
const html = parse(data);
res.json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map((i) => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles ').text || null,
image: attr(i, '.seriesimg .animemainimg', 'src') || null,
};
})
);
} catch (error) {
res.status(500).json({
message: error.message,
});
}
}

@ -0,0 +1,22 @@
import { api, attr, get, parse } from '../api'
import { Controller } from '../types'
export const searchAnime: Controller = async (req, res) => {
try {
const { id } = req.params
const { page = '1' } = req.query
const { data } = await get(api.search(id, page))
const html = parse(data)
res.json(
html.querySelectorAll('.heromain .row .col-md-4.col-lg-2.col-6').map(i => {
return {
id: attr(i, 'a', 'href').split('/').pop() || null,
title: i.querySelector('.seristitles ')?.text || null,
image: attr(i, '.seriesimg .animemainimg', 'src') || null,
}
})
)
} catch (error) {
res.status(500).json({ error })
}
}
Loading…
Cancel
Save