Lấy dữ liệu xổ số với nodejs,expressjs,cheeriojs

Link demo here
Code github in here
Do công việc có task get data xổ số hằng ngày.Sau khi ngâm cứu thì quyết định dùng nodejs để triển khai.
Công cụ sử dụng:

  • Nodejs
  • ExpressJS:Framework nodejs
  • Request: Dùng để xử lý HTTP
  • Cheerio:Triển khai jQuery dành riêng cho máy chủ (giúp chúng ta duyệt qua DOM và trích xuất dữ liệu)
  • Mysql:package thao tác với cơ sở dữ liệu mysql

Các bạn có thể xem cách setup nodejs trên linux với hướng dẫn này của mình
Phần 1 :Cài đặt
Tạo folder xoso.Sau đó chạy lệnh sau:

cd xoso
npm init

Các bạn cứ enter để mặc định.File package.json sẽ có nội dung sau:

{
  "name": "xoso",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Tiếp theo setup webserver:

npm install express ejs body-parser mysql cheerio request moment --save

Phần 2:Get data
Sử dụng data từ trang web xskt.com.vn
Ở đây mình get data xổ số miền nam hằng ngày với link:https://xskt.com.vn/ket-qua-xo-so-theo-ngay/mien-nam-xsmn/ngayxoso.html
Với ngayxoso có định dạng:dd-mm-YYYY
Tạo route /xoso/:ngay

var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();

app.get('/xoso/:ngay', function (req, res) {
    let ngayXo = req.params.ngay;
    url = `https://xskt.com.vn/ket-qua-xo-so-theo-ngay/mien-nam-xsmn/${ngayXo}.html`;
    return res.send(url);
})

app.listen('81')
console.log('Magic happens on port 81');
exports = module.exports = app;

Truy cập link:http://localhost:81/xoso/12-12-2018 để xem kết quả.Nếu result là https://xskt.com.vn/ket-qua-xo-so-theo-ngay/mien-nam-xsmn/12-12-2018.html thì code đã chạy ok.
Get các giải thưởng xố số hằng ngày:

Phần 3: Thêm data đã get được vào database
Tạo table provinces chứa dữ liệu tình và miền xố số

-- --------------------------------------------------------
-- Host:                         127.0.0.1
-- Server version:               10.1.13-MariaDB - mariadb.org binary distribution
-- Server OS:                    Win32
-- HeidiSQL Version:             10.2.0.5717
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

-- Dumping structure for table xoso.sys_province
DROP TABLE IF EXISTS `sys_province`;
CREATE TABLE IF NOT EXISTS `sys_province` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `type_region` tinyint(1) DEFAULT '0' COMMENT 'o:mien nam;1:mien trung;2:mien bac',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;

-- Dumping data for table xoso.sys_province: ~36 rows (approximately)
DELETE FROM `sys_province`;
/*!40000 ALTER TABLE `sys_province` DISABLE KEYS */;
INSERT INTO `sys_province` (`id`, `name`, `type_region`) VALUES
	(1, 'TP.HCM', 0),
	(2, 'An Giang', 0),
	(3, 'Bình Dương', 0),
	(4, 'Bạc Liêu', 0),
	(5, 'Bình Phước', 0),
	(6, 'Bến Tre', 0),
	(7, 'Bình Thuận', 0),
	(8, 'Cà Mau', 0),
	(9, 'Cần Thơ', 0),
	(10, 'Đà Lạt', 0),
	(11, 'Đồng Nai', 0),
	(12, 'Đồng Tháp', 0),
	(13, 'Hậu Giang', 0),
	(14, 'Kiên Giang', 0),
	(15, 'Long An', 0),
	(16, 'Sóc Trăng', 0),
	(17, 'Tiền Giang', 0),
	(18, 'Tây Ninh', 0),
	(19, 'Trà Vinh', 0),
	(20, 'Vĩnh Long', 0),
	(21, 'Vũng Tàu', 0),
	(22, 'Bình Định', 1),
	(23, 'Đắc Lắc', 1),
	(24, 'Đà Nẵng', 1),
	(25, 'Đắc Nông', 1),
	(26, 'Gia Lai', 1),
	(27, 'Khánh Hòa', 1),
	(28, 'Kon Tum', 1),
	(29, 'Ninh Thuận', 1),
	(30, 'Phú Yên', 1),
	(31, 'Quảng Bình', 1),
	(32, 'Quảng Ngãi', 1),
	(33, 'Quảng Nam', 1),
	(34, 'Quảng Trị', 1),
	(35, 'Thừa Thiên Huế', 1),
	(36, 'Miền Bắc', 2);
/*!40000 ALTER TABLE `sys_province` ENABLE KEYS */;

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

Tạo table sys_lottery chứa kết quả xổ số:

CREATE TABLE `sys_lottery` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`province_id` INT(11) NOT NULL,
	`g1` VARCHAR(100) NULL DEFAULT NULL,
	`g2` VARCHAR(100) NULL DEFAULT NULL,
	`g3` VARCHAR(100) NULL DEFAULT NULL,
	`g4` VARCHAR(100) NULL DEFAULT NULL,
	`g5` VARCHAR(100) NULL DEFAULT NULL,
	`g6` VARCHAR(100) NULL DEFAULT NULL,
	`g7` VARCHAR(100) NULL DEFAULT NULL,
	`g8` VARCHAR(100) NULL DEFAULT NULL,
	`db` VARCHAR(100) NULL DEFAULT NULL,
	`ngay_so` DATE NULL DEFAULT NULL,
	`thu_so` VARCHAR(50) NULL DEFAULT NULL,
	`vung` TINYINT(1) NULL DEFAULT '0' COMMENT '0:mien nam,1:mien trung,2:mien bac',
	`created_at` TIMESTAMP NULL DEFAULT NULL,
	`updated_at` TIMESTAMP NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB

Connect database:

var dbConn = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'xosomoi'
});
  
// connect to database
dbConn.connect(); 

Insert đài 1:

//insert dai 1
dbConn.query('SELECT * FROM sys_province where name=?', dai1, function (error, results, fields) {
    if (error) throw error;
    var provinceId=results[0].id;
    var dataInsert={
        province_id:provinceId,
        g1: g1_1,
        g2: g2_1,
        g3: g3_1,
        g4: g4_1,
        g5: g5_1,
        g6: g6_1,
        g7: g7_1,
        g8: g8_1,
        db: db_1,
        ngay_so: moment().format('YYYY-MM-DD'),
        thu_so: thu_xo,
        vung:0,
        created_at:moment().format('YYYY-MM-DD H:mm:ss')
    }
    dbConn.query("INSERT INTO sys_lottery SET ? ",dataInsert, function (error, results, fields) {
        if (error) throw error;
    });
});

Insert đài 2

//insert đài 2
dbConn.query('SELECT * FROM sys_province where name=?', dai2, function (error, results, fields) {
    if (error) throw error;
    var provinceId=results[0].id;
    var dataInsert={
        province_id:provinceId,
        g1: g1_2,
        g2: g2_2,
        g3: g3_2,
        g4: g4_2,
        g5: g5_2,
        g6: g6_2,
        g7: g7_2,
        g8: g8_2,
        db: db_2,
        ngay_so: moment().format('YYYY-MM-DD'),
        thu_so: thu_xo,
        vung:0,
        created_at:moment().format('YYYY-MM-DD H:mm:ss')
    }
    dbConn.query("INSERT INTO sys_lottery SET ? ",dataInsert, function (error, results, fields) {
        if (error) throw error;
    });
});

Insert đài 3

//insert đài 3
dbConn.query('SELECT * FROM sys_province where name=?', dai3, function (error, results, fields) {
    if (error) throw error;
    var provinceId=results[0].id;
    var dataInsert={
        province_id:provinceId,
        g1: g1_3,
        g2: g2_3,
        g3: g3_3,
        g4: g4_3,
        g5: g5_3,
        g6: g6_3,
        g7: g7_3,
        g8: g8_3,
        db: db_3,
        ngay_so: moment().format('YYYY-MM-DD'),
        thu_so: thu_xo,
        vung:0,
        created_at:moment().format('YYYY-MM-DD H:mm:ss')
    }
    dbConn.query("INSERT INTO sys_lottery SET ? ",dataInsert, function (error, results, fields) {
        if (error) throw error;
    });
});

Insert đài 4

//insert dai 4
if(g6_4!==null){
    dbConn.query('SELECT * FROM sys_province where name=?', dai4, function (error, results, fields) {
        if (error) throw error;
        var provinceId=results[0].id;
        var dataInsert={
            province_id:provinceId,
            g1: g1_4,
            g2: g2_4,
            g3: g3_4,
            g4: g4_4,
            g5: g5_4,
            g6: g6_4,
            g7: g7_4,
            g8: g8_4,
            db: db_4,
            ngay_so: moment().format('YYYY-MM-DD'),
            thu_so: thu_xo,
            vung:0,
            created_at:moment().format('YYYY-MM-DD H:mm:ss')
        }
        dbConn.query("INSERT INTO sys_lottery SET ? ",dataInsert, function (error, results, fields) {
            if (error) throw error;
        });
    });
}

Code hoàn chỉnh:

Phần 3:Tạo view hiển thị xổ số
Tạo folder views,sau đó tạo file views/home.ejs với nội dung sau

Homepage

Cấu hình load view:

app.set('view engine', 'ejs');

Tạo route

app.get('/ket-qua-xo-so', function (req, res) {
    res.render('home');
})

Truy cập link http://localhost:81/ket-qua-xo-so nếu thấy hiển thị Homepage bạn đã cấu hình template thành công
File server.js:

File template:

Kết quả:

0 Shares

Leave a Reply

avatar
  Subscribe  
Notify of