From 6b055bd2a56f313a7f534dfb943215f06231ea38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9luchu?= Date: Sat, 30 May 2020 11:35:10 +0200 Subject: [PATCH] Added GetAnitakume and GetNews --- package-lock.json | 143 ++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- src/api/api.js | 86 ++++++++++++++++++++++-- src/api/index.js | 4 +- src/api/routes/index.js | 26 ++++++++ src/api/urls.js | 3 + src/utils/index.js | 4 +- 7 files changed, 261 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2ffc15..2d48060 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,6 +67,14 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -90,6 +98,14 @@ "tweetnacl": "^0.14.3" } }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -284,6 +300,14 @@ "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -469,6 +493,11 @@ "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -493,6 +522,14 @@ } } }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -595,6 +632,11 @@ "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==" }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, "hpkp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", @@ -702,11 +744,36 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "requires": { + "punycode": "2.x.x" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "requires": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + }, + "dependencies": { + "hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==" + } + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -808,6 +875,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -818,6 +890,15 @@ "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" }, + "node-expat": { + "version": "2.3.18", + "resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz", + "integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==", + "requires": { + "bindings": "^1.5.0", + "nan": "^2.13.2" + } + }, "node-fetch": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", @@ -4091,6 +4172,24 @@ "lodash": "^4.17.15" } }, + "rss-parser": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.8.0.tgz", + "integrity": "sha512-EvjM0r3IymXnk+SCUawLhdH36D2WQCwpEfIyvu4hpPswYuMSk/jlCLOcg24OvXwVdcJcEocAlTZVjGNjOOSJXg==", + "requires": { + "entities": "^1.1.1", + "xml2js": "^0.4.19" + } + }, + "rss-to-json": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/rss-to-json/-/rss-to-json-1.1.1.tgz", + "integrity": "sha512-d+TwrFI5wAHbZ/fTd3Pvty14tadBjKHAjfMcUam9FWoWrC9g5rHJN9Slw10OZwk6Mey+hqdXwdmymO7d8ebVmw==", + "requires": { + "axios": "^0.19.2", + "xml2json": "^0.12.0" + } + }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", @@ -4101,6 +4200,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -4198,6 +4302,21 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, + "topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "requires": { + "hoek": "6.x.x" + }, + "dependencies": { + "hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" + } + } + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -4276,6 +4395,30 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xml2json": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/xml2json/-/xml2json-0.12.0.tgz", + "integrity": "sha512-EPJHRWJnJUYbJlzR4pBhZODwWdi2IaYGtDdteJi0JpZ4OD31IplWALuit8r73dJuM4iHZdDVKY1tLqY2UICejg==", + "requires": { + "hoek": "^4.2.1", + "joi": "^13.1.2", + "node-expat": "^2.3.18" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" } } } diff --git a/package.json b/package.json index 6830865..d8a29e2 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,8 @@ "morgan": "^1.10.0", "node-fetch": "^2.6.0", "npm": "^6.14.5", - "request": "^2.88.0" + "request": "^2.88.0", + "rss-parser": "^3.8.0", + "rss-to-json": "^1.1.1" } } diff --git a/src/api/api.js b/src/api/api.js index 5f107c5..a948930 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -1,14 +1,13 @@ -const cheerio = require('cheerio'); -const cheerioTableparser = require('cheerio-tableparser'); +const rss = require('rss-to-json'); const cloudscraper = require('cloudscraper'); const { - BASE_ANIMEFLV , BASE_JIKAN + BASE_ANIMEFLV, BASE_JIKAN, BASE_IVOOX, BASE_KUDASAI, BASE_PALOMITRON } = require('./urls'); const schedule = async (day) =>{ const data = await cloudscraper.get(`${BASE_JIKAN}schedule/${day}`); - let body = ""; + let body; switch (day) { case "monday": @@ -58,8 +57,85 @@ const getAllAnimes = async () =>{ }; +const getAnitakume = async () =>{ + + const promises = [] + + await rss.load(BASE_IVOOX).then(rss => { + + const body = JSON.parse(JSON.stringify(rss, null, 3)).items + body.map(doc =>{ + + let time = new Date(doc.created) + const monthNames = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]; + + let day = time.getDate() + let month = monthNames[time.getMonth()] + let year = time.getFullYear() + let date + + if(month < 10){ + date = `${day} de 0${month} de ${year}` + }else{ + date = `${day} de ${month} de ${year}` + } + + promises.push({ + title: doc.title, + duration: doc.itunes_duration, + created: date, + mp3: doc.enclosures.map(x => x.url) + }); + }); + + }); + + return Promise.all(promises); + +}; + +const getNews = async () =>{ + + const promises = [] + + await rss.load(BASE_KUDASAI).then(rss => { + + const body = JSON.parse(JSON.stringify(rss, null, 3)).items + body.map(doc =>{ + + promises.push({ + title: doc.title, + url: doc.link, + author: 'Kudasai', + content: doc.content_encoded + }); + }); + + }); + + await rss.load(BASE_PALOMITRON).then(rss => { + + const body = JSON.parse(JSON.stringify(rss, null, 3)).items + body.map(doc =>{ + + promises.push({ + title: doc.title, + url: doc.link, + author: 'Palomitron', + content: doc.description + }); + }); + + }); + + return Promise.all(promises); + +}; + module.exports = { schedule, top, - getAllAnimes + getAllAnimes, + getAnitakume, + getNews }; diff --git a/src/api/index.js b/src/api/index.js index bd9b3ea..6a9f87b 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -13,7 +13,9 @@ router.get('/', (req, res) => { { 'Schedule': '/api/v1/schedule/:id', 'Top': '/api/v1/top/:type/:subtype/:page', - 'GetAllAnimes': '/api/v1/getAllAnimes' + 'GetAllAnimes': '/api/v1/getAllAnimes', + 'GetAnitakume': '/api/v1/getAnitakume', + 'GetNews': '/api/v1/getNews' } ] }); diff --git a/src/api/routes/index.js b/src/api/routes/index.js index 700c196..451071b 100644 --- a/src/api/routes/index.js +++ b/src/api/routes/index.js @@ -47,4 +47,30 @@ router.get('/getAllAnimes' , (req, res) =>{ }); +router.get('/getAnitakume' , (req, res) =>{ + + api.getAnitakume() + .then(podcast =>{ + res.status(200).json({ + podcast + }); + }).catch((err) =>{ + console.error(err); + }); + +}); + +router.get('/getNews' , (req, res) =>{ + + api.getNews() + .then(news =>{ + res.status(200).json({ + news + }); + }).catch((err) =>{ + console.error(err); + }); + +}); + module.exports = router; diff --git a/src/api/urls.js b/src/api/urls.js index 146527e..40d56e4 100644 --- a/src/api/urls.js +++ b/src/api/urls.js @@ -1,6 +1,9 @@ module.exports = { BASE_ANIMEFLV: 'https://animeflv.net/', BASE_JIKAN: 'https://dev.aruppi.jeluchu.xyz/apis/jikan/v3/', + BASE_IVOOX: 'https://www.ivoox.com/podcast-anitakume_fg_f1660716_filtro_1.xml', + BASE_KUDASAI: 'https://somoskudasai.com/feed/', + BASE_PALOMITRON: 'https://elpalomitron.com/category/animemanga/feed/', BROWSE_URL: 'https://animeflv.net/browse?', SEARCH_URL: 'https://animeflv.net/browse?q=', ANIME_VIDEO_URL: 'https://animeflv.net/ver/', diff --git a/src/utils/index.js b/src/utils/index.js index 7aa6c07..0a01dfd 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -40,7 +40,7 @@ const urlify = async(text) =>{ module.exports = { MergeRecursive, + millisecondsToDate, imageUrlToBase64, - urlify, - decodeZippyURL + urlify } \ No newline at end of file