From 34bb36211bba0e8d4a64d0c5b886191c4b250a8d Mon Sep 17 00:00:00 2001 From: d4rtj Date: Thu, 1 Sep 2022 10:39:22 +0700 Subject: [PATCH] first commit --- .gitignore | 2 + app.js | 17 +++++ controllers/mainController.js | 119 ++++++++++++++++++++++++++++++++++ package.json | 25 +++++++ routes/index.js | 7 ++ routes/v1/index.js | 9 +++ 6 files changed, 179 insertions(+) create mode 100644 .gitignore create mode 100644 app.js create mode 100644 controllers/mainController.js create mode 100644 package.json create mode 100644 routes/index.js create mode 100644 routes/v1/index.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5e52727 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules +package-lock.json diff --git a/app.js b/app.js new file mode 100644 index 0000000..85db2d6 --- /dev/null +++ b/app.js @@ -0,0 +1,17 @@ +const express = require('express'); +const cors = require('cors'); +require('express-async-errors'); +require('dotenv').config(); +const app = express(); + +const routes = require('./routes/index'); + +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +app.use(cors()); + +routes(app); + +app.listen(process.env.PORT || 3000, () => { + console.log('Server started on port 3000'); +}); diff --git a/controllers/mainController.js b/controllers/mainController.js new file mode 100644 index 0000000..3e047d2 --- /dev/null +++ b/controllers/mainController.js @@ -0,0 +1,119 @@ +const axios = require('axios'); +const cheerio = require('cheerio'); + +const url = 'https://xosoketqua.com/xsmb-xo-so-mien-bac.html'; + +class MainController { + getAll = (req, res) => { + const numbers = []; + const names = []; + const times = []; + const objTimesNames = {}; + const obj = {}; + + try { + axios(url).then(response => { + const html = response.data; + const $ = cheerio.load(html); // sử dụng giống jQuery + + $('table', html) + .first() + .each(function () { + $(this) + .find('td > span.div-horizontal') + .each(function () { + numbers.push($(this).text()); + }); + + // console.log(numbers); + $(this) + .find('tr > td:first-child') + .each(function (i) { + const name = $(this).text(); + + if (name !== 'Mã ĐB') { + // for (let i = 0; i < names.length; i++) { + if (names.includes(name)) { + return; + } else { + names.push(name); + } + // } + } + }); + }); + if (numbers.length > 0) { + for (let i = 0; i < names.length; i++) { + objTimesNames[names[0]] = numbers[0]; + objTimesNames[names[1]] = numbers[1]; + objTimesNames[names[2]] = [numbers[2], numbers[3]]; + objTimesNames[names[3]] = [ + numbers[4], + numbers[5], + numbers[6], + numbers[7], + numbers[8], + numbers[9], + ]; + objTimesNames[names[4]] = [ + numbers[10], + numbers[11], + numbers[12], + numbers[13], + ]; + objTimesNames[names[5]] = [ + numbers[14], + numbers[15], + numbers[16], + numbers[17], + numbers[18], + numbers[19], + ]; + objTimesNames[names[6]] = [ + numbers[20], + numbers[21], + numbers[22], + ]; + objTimesNames[names[7]] = [ + numbers[23], + numbers[24], + numbers[25], + numbers[26], + ]; + } + } + + // $('.list-link', html) + // .find('h2 > a:last-child') + // .each(function () { + // const time = $(this).prop('innerHTML').split(' ')[1]; + + // // times.push(time); + // console.log(time); + // }); + + // if (times.length > 0) { + // times.forEach(time => { + // for (let i = 0; i < names.length; i++) { + // objTimesNames[time] = [...names]; + // } + // }); + // } + const nowDay = new Date(); + // console.log(nowDay.getDate() + '/' + ((nowDay.getMonth() + 1) < 10 ? ('0'+ (nowDay.getMonth() + 1)) : (nowDay.getMonth() + 1)) + '/' + nowDay.getFullYear()); + // console.log(nowDay.getHours() + ':' + nowDay.getMinutes()); + // console.log(objTimesNames); + res.status(200).json({ + countNumbers: numbers.length, + time: nowDay, + objTimesNames, + }); + }); + } catch (e) { + res.status(500).json({ msg: e }); + } + }; + getById = async (req, res) => {}; +} + +module.exports = new MainController(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..f466ba4 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "apixsmb", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node app.js", + "dev": "nodemon app.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^0.27.2", + "cheerio": "^1.0.0-rc.12", + "cors": "^2.8.5", + "dotenv": "^16.0.1", + "express": "^4.18.1", + "express-async-errors": "^3.1.1" + }, + "devDependencies": { + "nodemon": "^2.0.19" + } +} diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..91a89ed --- /dev/null +++ b/routes/index.js @@ -0,0 +1,7 @@ +const routeV1 = require('./v1/index'); + +const routes = app => { + app.use('/v1', routeV1); +}; + +module.exports = routes; diff --git a/routes/v1/index.js b/routes/v1/index.js new file mode 100644 index 0000000..6f0d52c --- /dev/null +++ b/routes/v1/index.js @@ -0,0 +1,9 @@ +const express = require('express'); +const router = express.Router(); + +const mainController = require('../../controllers/mainController'); + +router.get('/', mainController.getAll); +router.get('/:id', mainController.getById); + +module.exports = router;