diff --git a/.gitignore b/.gitignore
index b512c09..76add87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-node_modules
\ No newline at end of file
+node_modules
+dist
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
index 09a4e18..4e5abd7 100644
--- a/public/index.html
+++ b/public/index.html
@@ -5,6 +5,7 @@
+
Document
diff --git a/src/controllers/controller.ts b/src/controllers/controller.ts
index cf3acfa..5d79edf 100644
--- a/src/controllers/controller.ts
+++ b/src/controllers/controller.ts
@@ -50,7 +50,7 @@ async function getLastest(req: any, res: any) {
success: false
})
}
-}
+};
async function getEmision(req: any, res: any) {
try {
let { page } = req.query;
@@ -98,7 +98,7 @@ async function getEmision(req: any, res: any) {
success: false
})
}
-}
+};
async function getAnime(req: any, res: any) {
try {
let { id } = req.params;
@@ -200,6 +200,58 @@ async function getAnime(req: any, res: any) {
});
};
};
+async function getAnimes(req, res) {
+ try {
+ let {page} = req.params;
+ !page ? page = 1 : page = page
+
+
+ const bodyResponse = await axios.get(`${urls.main}/animes?page=${page}`);
+ const $ = cheerio.load(bodyResponse.data);
+
+ const animes = [];
+
+ $('.animes .container .row article').each((i, e) => {
+ let el = $(e);
+
+ let id = el.find('a').attr('href');
+ id = id.split('/')[4]
+ let title = el.find('.Title').text();
+ let img = el.find('.Image img').attr('src');
+ let category = el.find('.category').text();
+ category = category.substring(1, category.length)
+ let year = parseInt(el.find('.fecha').text());
+
+ const anime = {
+ id,
+ title,
+ img,
+ category,
+ year
+ }
+
+ animes.push(anime);
+ })
+
+ let totalPages:any = $('.pagination').children().length;
+ totalPages = $('.pagination').find('.page-item')[totalPages - 2];
+ let pages = parseInt($(totalPages).text());
+ let current = parseInt(page)
+ res.status(200)
+ .json({
+ current,
+ pages,
+ animes
+ })
+
+ } catch (err) {
+ res.status(500)
+ .json({
+ message: err.message,
+ success: false
+ })
+ }
+};
async function searchAnime(req: any, res: any) {
try {
let { id } = req.params;
@@ -345,7 +397,7 @@ async function getCategories(req, res) {
res.status(200)
.json(
categories,
- )
+ )
} catch (err) {
res.status(500)
.json({
@@ -390,6 +442,58 @@ async function getGenders(req, res) {
})
}
};
+async function getGender(req:any, res:any) {
+ try {
+ let { gender } = req.params;
+ let { page } = req.params;
+ !page ? page = 1 : page = page
+ const bodyResponse = await axios.get(`${urls.main}/genero/${gender}?page=${page}`);
+ const $ = cheerio.load(bodyResponse.data);
+ const animes = [];
+
+ $('.animes .container .row article').each((i, e) => {
+ let el = $(e);
+
+ let id = el.find('a').attr('href');
+ id = id.split('/')[4]
+ let title = el.find('.Title').text();
+ let img = el.find('.Image img').attr('src');
+ let category = el.find('.category').text();
+ category = category.substring(1, category.length)
+ let year = parseInt(el.find('.fecha').text());
+
+ const anime = {
+ id,
+ title,
+ img,
+ category,
+ year
+ }
+
+ animes.push(anime);
+ })
+
+ let totalPages: any = $('.pagination').children().length;
+ totalPages = $('.pagination').find('.page-item')[totalPages - 2];
+ let pages = parseInt($(totalPages).text());
+
+ let current = parseInt(page)
+ res.status(200)
+ .json({
+ current,
+ pages,
+ animes
+ })
+
+ } catch (err) {
+ res.status(500)
+ .json({
+ message: err.message,
+ success: false
+ })
+ }
+
+}
async function getYears(req, res) {
try {
const response = await axios.get(`${urls.main}/animes`);
@@ -426,15 +530,174 @@ async function getYears(req, res) {
})
}
};
+async function getYear(req: any, res: any) {
+ try {
+ let { year } = req.params;
+ let { page } = req.params;
+ !page ? page = 1 : page = page
+ const bodyResponse = await axios.get(`${urls.main}/year/${year}?page=${page}`);
+ const $ = cheerio.load(bodyResponse.data);
+ const animes = [];
+ $('.animes .container .row article').each((i, e) => {
+ let el = $(e);
+
+ let id = el.find('a').attr('href');
+ id = id.split('/')[4]
+ let title = el.find('.Title').text();
+ let img = el.find('.Image img').attr('src');
+ let category = el.find('.category').text();
+ category = category.substring(1, category.length)
+ let year = parseInt(el.find('.fecha').text());
+
+ const anime = {
+ id,
+ title,
+ img,
+ category,
+ year
+ }
+
+ animes.push(anime);
+ })
+
+ let totalPages: any = $('.pagination').children().length;
+ totalPages = $('.pagination').find('.page-item')[totalPages - 2];
+ let pages = parseInt($(totalPages).text());
+
+ let current = parseInt(page)
+ res.status(200)
+ .json({
+ current,
+ pages,
+ animes
+ })
+
+ } catch (err) {
+ res.status(500)
+ .json({
+ message: err.message,
+ success: false
+ })
+ }
+
+};
+async function getLetters(req, res) {
+ try {
+ const bodyResponse = await axios.get(`${urls.main}/animes`);
+ const $ = cheerio.load(bodyResponse.data);
+ const letters = []
+ let lettersContainer = $('.filter-container .clearfix .float-left')[3];
+ $(lettersContainer).find('.dropdown-menu .dropdown-item')
+ .each((i, e) => {
+ let el = $(e)
+ let title = el.text();
+ let id = el.attr('href');
+ id = id.split('/')[2];
+ let letter = {
+ title,
+ id
+ }
+ letters.push(letter)
+ })
+
+ res.status(200)
+ .json(
+ letters,
+ )
+
+ } catch (err) {
+ res.status(500)
+ .json({
+ message: err.message,
+ success: false
+ })
+ }
+};
+async function getBy(req, res, multiple?) {
+ try {
+ let {
+ gender,
+ letter,
+ category
+ } = req.params;
+
+ let {
+ page
+ } = req.query;
+
+ if (!page) {
+ page = 1
+ }
+
+ let bodyResponse;
+
+ if (multiple) {
+ bodyResponse = await axios.get(`${urls.main}/categoria/${category}/genero/${gender}?page=${page}`);
+ } else if (gender && !multiple) {
+ bodyResponse = await axios.get(`${urls.main}/genero/${gender}?page=${page}`);
+ } else if (letter && !multiple) {
+ bodyResponse = await axios.get(`${urls.main}/letra/${letter}?page=${page}`);
+ } else if (category && !multiple) {
+ bodyResponse = await axios.get(`${urls.main}/categoria/${category}?page=${page}`);
+ }
+ const $ = cheerio.load(bodyResponse.data);
+
+ const animes = [];
+
+ $('.animes .container .row article').each((i, e) => {
+ let el = $(e);
+ let id = el.find('.link-anime').attr('href');
+ id = id.split('/')[4];
+ let img = el.find('.link-anime .Image img').attr('src');
+ let title = el.find('.link-anime .Title').text();
+ let type = el.find('.link-anime .info .category').text();
+ let year = el.find('.link-anime .info .fecha').text();
+
+ let anime = {
+ id,
+ img,
+ title,
+ type,
+ year
+ }
+
+ animes.push(anime);
+
+ })
+
+ let totalPages:any = $('.pagination').children().length;
+ totalPages = $('.pagination').find('.page-item')[totalPages - 2];
+ let pages = parseInt($(totalPages).text());
+
+ res.status(200)
+ .json({
+ animes,
+ pages,
+ success: true
+ })
+
+ } catch (err) {
+ res.status(500)
+ .json({
+ message: err.message,
+ success: false
+ })
+ }
+}
export {
getLastest,
getEmision,
getAnime,
+ getAnimes,
searchAnime,
getEpisode,
getCategories,
getGenders,
+ getGender,
getYears,
+ getYear,
+ getLetters,
+ getBy
}
\ No newline at end of file
diff --git a/src/routes/api.routes.ts b/src/routes/api.routes.ts
index e72f64b..6a7f514 100644
--- a/src/routes/api.routes.ts
+++ b/src/routes/api.routes.ts
@@ -4,23 +4,31 @@ import {
getEmision,
getLastest,
getAnime,
+ getAnimes,
searchAnime,
getEpisode,
getGenders,
+ getGender,
getCategories,
- getYears
+ getYears,
+ getYear,
+ getLetters,
+ getBy
} from '../controllers/controller'
routes.get('/lastest', (req, res) => {
getLastest(req, res);
-})
+});
routes.get('/emision', (req, res) => {
getEmision(req, res);
});
routes.get('/anime/:id', (req, res) => {
getAnime(req, res);
});
+routes.get('/animes/:page', (req, res) => {
+ getAnimes(req, res);
+});
routes.get('/ver/:id', (req, res) => {
getEpisode(req, res);
});
@@ -30,11 +38,33 @@ routes.get('/search/:id', (req, res) => {
routes.get('/genders', (req, res) => {
getGenders(req, res);
});
+routes.get('/gender/:gender/:page', (req, res) => {
+ getGender(req, res);
+});
routes.get('/categories', (req, res) => {
getCategories(req, res);
});
routes.get('/years', (req, res) => {
getYears(req, res);
});
+routes.get('/year/:year/:page', (req, res) => {
+ getYear(req, res);
+});
+routes.get('/letters', (req, res) => {
+ getLetters(req, res);
+});
+routes.get('/category/:category/gender/:gender', (req, res) => {
+ getBy(req, res, true)
+})
+routes.get('/gender/:gender', (req, res) => {
+ getBy(req, res);
+})
+routes.get('/letter/:letter', (req, res) => {
+ getBy(req, res);
+})
+
+routes.get('/category/:category', (req, res) => {
+ getBy(req, res);
+})
export default routes
\ No newline at end of file