Source code này làm DEMO cho bài viết Tạo ứng dụng điện thoại báo cáo tình trạng coronavirus trong vòng 2 ngày
PROJECT_FOLDER>git clone https://github.com/lapth/CoronavirusData.git
- Node: 10.x => Ở ứng dụng này, mình ép Node ở 10.x để tránh 1 số lỗi khi cần deploy ứng dụng này lên Serverless, môi trường mình ko config được gì.
- express: dùng tạo RESTful service
- node-schedule: dùng tạo bộ job scheduling
- nodemailer: hỗ trợ gửi mail
- node-fetch: load dữ liệu
Ứng dụng Back-End bạn nên chạy thử luôn trên server không cần phải thử ở local, để tránh những vấn đề không tương thích do bạn cấu hình trên local 1 đường, server cần một kiểu.
- Cấu hình PORT default của Node. Trong trường hợp xài 1 số môi trường free, bạn không thể tùy biến khi chạy được nên bạn phải thay đổi thông số mặc định. Ở đây mình chọn 5454
- Cấu hình mail server để gửi mail, nếu bạn ko muốn thì bỏ dòng lệnh tương ứng trong file MailHelper.js là được.
- Cấu hình Ingress port 5454 cho GCP để ứng dụng có thể public ra ngoài mạng Internet ở port đó. Áp dụng cấu hình đó cho VM mình tạo cho dự án này hoặc đơn giản để Target = Apply to all
Một số lệnh bạn cần biết:
Start node server:
PROJECT_HOME>npm start
Start node server ở chế độ background, không bị tắt sau khi đóng console. Với lệnh này server sẻ log ra file nohup.out
PROJECT_HOME>nohup npm start &
Start node server ở chế độ background, không bị tắt sau khi close console và bỏ luôn log
PROJECT_HOME>nohup npm start >dev/null &
Sau khi bạn chạy server này, ứng dụng sẻ đi lấy dữ liệu mỗi 5 phút / lần và lưu vào file public/data/data.json
File này được public ra ngoài cho ứng dụng client sử dụng.
Bạn cần start quá trình crawl dữ liệu trước khi hoàn tất
http:\\IP:5454\start
Đến đây ứng dụng trên điện thoại của bạn đã có thể truy cập vào và lấy dữ liệu thực để hiển thị.
Do thời gian hạn chế, phần tổng hợp, phân tích dữ liệu còn sơ sài, để phần này tốt hơn chúng ta có thể bóc tách dữ liệu từ WHO và Bộ Y Tế. Để thực hiện phần này mình giới thiệu bạn 2 công nghệ:
- Web Crawler: dùng để bóc tách dữ liệu từ web, thư viện mình hay xài là JSDom và Puppeteer
- Để bóc tách dữ liệu từ file hình ảnh, file pdf ... một trong những thư viện bạn có thể sử dụng là Tesseract
Để phần DEMO này tốt hơn cho cộng đồng mình welcome tất cả PRs (* _ *)
Chúc bạn thành công!