Nguyễn Lê Hoài Ân – 16520011 Nội dung đề tài: • Mục tiêu: - Xây dựng hệ thống bao gồm những chức năng cơ bản của một trang thông tin bất động sản: xem tin bất động sản, tìm kiếm thông
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN LÊ HOÀI ÂN
KHÓA LUẬN TỐT NGHIỆP
HỆ THỐNG THU THẬP VÀ CHIA SẺ THÔNG TIN
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN LÊ HOÀI ÂN – 16520011
KHÓA LUẬN TỐT NGHIỆP
HỆ THỐNG THU THẬP VÀ CHIA SẺ THÔNG TIN
TP HỒ CHÍ MINH, 2021
Trang 3DANH SÁCH HỘI ĐỒNG BẢO VỆ KHÓA LUẬN
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số
ngày của Hiệu trưởng Trường Đại học Công nghệ Thông tin
Tên khoá luận:
HỆ THỐNG THU THẬP VÀ CHIA SẺ THÔNG TIN BẤT ĐỘNG SẢN
Trang 4Đánh giá Khóa luận
1 Về cuốn báo cáo:
Số trang _ Số chương _
Số bảng số liệu _ Số hình vẽ _
Số tài liệu tham khảo _ Sản phẩm _
Một số nhận xét về hình thức cuốn báo cáo:
Trang 5Điểm từng sinh viên:
Nguyễn Lê Hoài Ân: /10
Người nhận xét
(Ký tên và ghi rõ họ tên)
Trang 6ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
Tên khoá luận:
HỆ THỐNG THU THẬP VÀ CHIA SẺ THÔNG TIN BẤT ĐỘNG SẢN
KẾT HỢP CHATBOT
Nhóm SV thực hiện - Cán bộ phản biện:
Nguyễn Lê Hoài Ân 16520011
Đánh giá Khóa luận
1 Về cuốn báo cáo:
Số trang _ Số chương _
Số bảng số liệu _ Số hình vẽ _
Số tài liệu tham khảo _ Sản phẩm _
Một số nhận xét về hình thức cuốn báo cáo:
Trang 7
2 Về nội dung nghiên cứu:
Điểm từng sinh viên:
Nguyễn Lê Hoài Ân: /10
Người nhận xét
(Ký tên và ghi rõ họ tên)
Trang 8Em xin cảm ơn các bạn trong nhóm làm khoá luận đã đóng góp ý kiến để khoá luận hoàn chỉnh hơn
Cuối cùng, chúng em xin gửi lòng biết ơn sâu sắc đến cha mẹ, gia đình đã tạo mọi điều kiện
về vật chất, tinh thần, động viên, khích lệ và hỗ trợ chúng em trong suốt thời gian qua
Mặc dù đã cố gắng hoàn thành khoá luận với tất cả sự nổ lực, nhưng khoá luận chắc chắn không tránh khỏi những thiếu sót, chúng em kính mong quý thầy cô tận tình chỉ bảo
Chúng em xin chân thành cảm ơn!
TP Hồ Chí Minh, tháng 1 năm 2021
Sinh viên 1
(Ký tên và ghi rõ họ tên)
Trang 9ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
ĐỀ CƯƠNG CHI TIẾT
Tên đề tài: Xây dựng ứng dụng thu nhập và chia sẻ thông tin bất động sản kết hợp chatbot
Cán bộ hướng dẫn: TS Huỳnh Ngọc Tín, ThS Trần Anh Dũng
Thời gian thực hiện: Từ ngày 01/09/2020 đến ngày 31/12/2020
Sinh viên thực hiện:
1 Nguyễn Lê Hoài Ân – 16520011
Nội dung đề tài:
• Mục tiêu:
- Xây dựng hệ thống bao gồm những chức năng cơ bản của một trang thông tin bất động sản: xem tin bất động sản, tìm kiếm thông tin như: giá cả, địa chỉ, thể hiện chi tiết thông tin bất động sản, cho phép thích – bình luận bài viết
- Xây dựng hệ thống cho phép người dùng đăng tin chia sẻ bất động sản
- Xây dựng trang web thông tin bất động sản như một trang mạng xã hội thu nhỏ
- Xây dựng hệ thống chatbot hỗ trợ người dùng khi có thắc mắc cần giải đáp, nhanh
chóng trong việc nhận câu trả lời thay vì phải nói chuyện trực tiếp với nhân viên, tự động hoá quy trình hỗ trợ người dùng Công nghệ nhóm em sử dụng chatbot là
Dialogflow API, hỗ trợ trong việc tự động trả lời câu hỏi, ngoài ra còn sử dụng thêm
Trang 10Webhook và facebook application để kết nối server bot lên facebook, người dùng sẽ nói chuyện với bot thông qua facebook messenger Dialogflow hỗ trợ sẵn các câu thoại để bot nhận diện, nhóm em chỉ cần tích hợp ứng dụng của nhóm vào Dialogflow, sau đó ghi câu hỏi và câu trả lời mà không cần phải xây dựng gì
- Xây dựng hệ thống với các công nghệ mới như Nodejs, Reactjs, MongoDB Nhóm em chọn những công nghệ này vì chúng có tính bao quát rộng hơn, Nodejs hỗ trợ bất đồng
bộ giúp nhiều phương thức chạy động thời, MongoDB là một noSQL hỗ trợ dễ dàng trong việc thêm dữ liệu, không cần khai báo biến mà sử dụng “key: value”, còn Reactjs
là một frontend mới nổi do facebook tạo ra, hỗ trợ rất nhiều thư viện, giúp dễ dàng trong việc xây dựng ứng dụng
• Đối tượng: Những người có nhu cầu tìm kiếm và chia sẻ thông tin bất động sản
• Tính mới/ khác biệt về chức năng:
- Thêm ý tưởng:
Các trang bất động sản hiện nay đa số đều có phương thức hoạt động tương đồng ở các hình thức chia sẻ thông tin bất động sản, thông tin được cung cấp tràn lan, một chiều, không có tính xác thực, không có nhận xét từ người dùng
Vì thế nhóm em quyết định xây dựng trang web thông tin bất động sản như một trang mạng xã hội thu nhỏ, có các chức năng cơ bản như thích – bình luận – nhắn tin
để tăng tính tương tác giữa người dùng, tăng tính xác thực cho thông tin bất động sản
Trang 11alonhadat.com.vn có thêm mục yêu thích, vì thế ứng dụng của nhóm có thêm phần danh sách ưa thích, khi người dùng thấy thích nơi nào có thể chọn lưu vào danh sách để xem lại sau
Các trang bất động sản đều trình bày theo hình thức đơn giản, khiến người dùng dễ dàng sử dụng khi lần đầu vào trang web Cũng vì thế mà nhóm cũng
đã thiết kế giao diện gọn gàng không rối mắc
Các trang bất động sản gần như đăng tin bất động sản rất phong phú và đa dạng, nhưng chúng gần như không giống nhau, người dùng muốn tìm hiểu phải vào từng trang xem Tận dụng điều đó nhóm đã sử dụng phương pháp thu thập thông tin từ các trang bất động sản lớn ở Việt Nam, để người dùng khi vào ứng dụng là đầy đủ thông tin của các trang bất động sản trên, không cần phải mở nhiều trang khác nhau
Ngoài ra còn các chức năng cơ bản của các trang bất động sản như tìm kiếm, đăng tin, sửa tin, xem thông tin chi tiết
• Phạm vi:
- Phạm vi địa lý: Ứng dụng sử dụng tại Việt Nam
- Phạm vi chức năng:
Quản lý người sử dụng
Quản lý bài viết
Quản lý thông tin bất động sản
Quản lý thông tin bài viết được lấy từ trang alonhadat.com.vn
Quản lý tìm kiếm thông tin
• Phương pháp thực hiện:
Trang 12- Làm việc cá nhân, sử dụng cheerio và request để lấy thông tin công ty từ một trang web
cụ thể, lưu xuống database và xuất lên cho người dùng thấy
- Xậy dựng database với mongoDB
- Xây dựng hệ thống Restful API với nodejs và express
- MongoDB là một noSQL, là một dạng dữ liệu mã nguồn mở, chúng ta có thể khai báo bất cứ thứ gì mà không cần phải sợ sai kiểu dữ liệu vì MongoDB đọc theo dạng (key : value)
- Reactjs là một frontend được nhiều phần mềm sử dụng vì tính phong phú và đa dạng, được nhiều thư việc hỗ trợ, nên có thể tuỳ biến phần frontend trở nên đẹp hơn mà không thô cứng
Trang 13- ExpressJs là công nghệ sử dụng ở dưới phần backend Nodejs, giúp xây dựng các API
để gọi tới MongoDB
- Postman là một chương trình ngoài để kiểm tra các API một cách độc lập mà không cần phải thao tác trên ứng dụng
- Visual Code là phần mềm để viết và thực thi các dòng lệnh
- Webhook là công nghệ cho phép ứng dụng cung cấp data cho một ứng dụng khác trong thời gian thực
- Dialogflow (tiền thân là API.AI) là một dịch vụ do Google cung cấp nhằm giúp các lập trình viên dễ dàng hơn khi lập trình các sản phẩm có giao tiếp giữa người dùng với sản phẩm thông qua các đoạn hội thoại bằng văn bản hay giọng nói Dialogflow sử dụng trí tuệ nhân tạo (AI) giúp phân tích ngôn ngữ tự nhiên để hiểu được những gì người dùng đưa vào
• Kết quả mong đợi:
- Hoàn thiện ứng dụng web thu thập và chia sẻ thông tin bất động sản, đáp ứng đủ các nhu cầu cơ bản
- Tạo ra hệ thống cho người dùng có thể đăng thông tin rao bán trên website
• Định hướng phát triển: Mở rộng thêm các trang web khác, thêm các tính năng mới tiện lợi cho người dùng
Kế hoạch thực hiện: (thời gian thực hiện trong 17 tuần)
công
Trang 14Phase 1: Tìm hiểu và xây dựng ứng dụng web có
backend và frontend
4 tuần
1 Sprint 1: Tìm hiểu các định nghĩa về Nodejs +
Express + Reactjs + mongodb
2 Sprint 2: Xây dựng ứng dụng cơ bản kết hợp
Nodejs + Express + Reactjs
2.1
- Xây dựng ứng dụng cơ bản để hiểu về luồng
chạy của các ngôn ngữ, kết hợp 2 sever nodejs và
reactjs thành 1
Tuần 3 – 4 (14/9/2020 – 27/9/2020) Ân
Phase 2: Xây dựng ứng dụng thu nhập và chia sẻ
thông tin của các công ty
11 tuần
3 Sprint 3: Xây dựng RESTful API với database
mongodb
3.1
- Tạo database và kết nối mongodb
- Tạo API để lấy thông tin từ một đường link cụ
thể, xuất ra thông tin và trả về cho người dùng
- Tạo API thêm, sửa, xoá các lĩnh vực
Tuần 5 – 9 (28/9/2020 – 1/11/2020) Ân
4 Sprint 4: Xây dựng Frontend với Reactjs
Trang 154.1
- Tạo trang web với Reactjs
- Gọi các API từ Backend lên Frontend để sử dụng
- Thiết kế và chỉnh sửa UI/UX
Tuần 10 – 15 (2/11/2020 – 13/12/2020) Ân
Xác nhận của CBHD (Ký tên và ghi rõ họ tên)
TP HCM, ngày 29 tháng 09 năm 2020
Sinh viên (Ký tên và ghi rõ họ tên)
Trang 16MỤC LỤC
TÓM TẮT KHÓA LUẬN 1
Chương 1 TỔNG QUAN 2
1.1 Đặt vấn đề 2
1.2 Phát biểu bài toán 2
1.3 Mục tiêu và phạm vi đề tài 4
Chương 2 CƠ SỞ LÝ THUYẾT 7
2.1 Cherrio 7
2.2 MongoDB 7
2.3 Webhook 10
2.4 Dialogflow 12
2.5 REST 13
2.6 Nodejs 18
2.7 ExpressJS framework 19
2.8 Reactjs 21
Chương 3 PHÁT BIỂU BÀI TOÁN 25
3.1 Giới thiệu hệ thống website “Tìm kiếm và chia sẻ thông tin bđs” 25
3.2 Khảo sát các hệ thống liên quan 25
3.3 Yêu cầu hệ thống 30
Chương 4 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 33
4.1 Sơ đồ phân rã chức năng 33
4.2 Mô hình Usecase 34
4.3 Các sơ đồ và luồng xử lý 35
Trang 174.4 Thiết kế kiến trúc 54
Chương 5 KIỂM THỬ PHẦN MỀM 73
5.1 Môi trường kiểm thử 73
5.2 Thực thi kiểm thử 73
5.3 Kiểm thử chức năng 74
Chương 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 77
6.1 Kết luận 77
6.2 Hướng phát triển 78
TÀI LIỆU THAM KHẢO 79
Trang 18DANH MỤC HÌNH
Hình 2.1 Quy trình làm việc của Webhook 11
Hình 2.2 Quy trình thực hiện của Dialogflow 13
Hình 2.3 Phi trạng thái trong Restful 15
Hình 2.4 Các nền tảng mà REST hỗ trợ 17
Hình 2.5 Blocking I/O (trái) và Non-Blocking I/O (phải) 19
Hình 2.6 Cấu trúc của ExpressJs 20
Hình 2.7 Lí do vì sao nên sử dụng Reactjs 24
Hình 3.1 Trang chủ của alonhadat.com.vn 27
Hình 3.2 Trang chủ của mogi.vn 29
Hình 4.1 Sơ đồ phân rã chức năng 33
Hình 4.2 Sơ đồ Usecase tổng quan 34
Hình 4.3 Sơ đồ hoạt động của chức năng tạo tài khoản 37
Hình 4.4 Sơ đồ trình tự của chức năng tạo tài khoản 38
Hình 4.5 Sơ đồ hoạt động của chức năng đăng nhập 39
Hình 4.6 Sơ đồ trình tự của chức năng đăng nhập 40
Hình 4.7 Sơ đồ hoạt động của chức năng sắp xếp thông tin 41
Hình 4.8 Sơ đồ trình tự của chức năng sắp xếp thông tin 42
Hình 4.9 Sơ đồ hoạt động của chức năng thông tin bài viết 43
Hình 4.10 Sơ đồ trình tự của chức năng thông tin bài viết 44
Hình 4.11 Sơ đồ hoạt động của chức năng danh sách ưa thích 45
Hình 4.12 Sơ đồ trình tự của chức năng danh sách ưa thích 46
Hình 4.13 Sơ đồ hoạt động của chức năng tìm kiếm thông tin 47
Hình 4.14 Sơ đồ trình tự của chức năng tìm kiếm thông tin 48
Hình 4.15 Sơ đồ hoạt động của chức năng trò chuyện với chatbot 49
Hình 4.16 Sơ đồ trình tự của chức năng trò chuyện với chatbot 50
Hình 4.17 Sơ đồ hoạt động của chức năng thích 51
Hình 4.18 Sơ đồ trình tự của chức năng thích 52
Hình 4.19 Sơ đồ hoạt động của chức năng bình luận 53
Trang 19Hình 4.20 Sơ đồ trình tự của chức năng bình luận 54
Hình 4.21 Cơ sở dữ liệu 57
Hình 4.22 Giao diện đăng nhập 60
Hình 4.23 Giao diện đăng ký 62
Hình 4.24 Giao diện trang chủ 63
Hình 4.25 Giao diện icon menu trang chủ 64
Hình 4.26 Giao diện thanh tìm kiếm 65
Hình 4.27 Giao diện thanh sắp xếp 65
Hình 4.28 Giao diện tính năng messenger 66
Hình 4.29 Giao diện danh sách trang 67
Hình 4.30 Giao diện đăng tin 68
Hình 4.31 Giao diện thông tin bài viết 69
Hình 4.32 Giao diện danh sách ưa thích 70
Hình 4.33 Giao diện của một thông tin bất động sản 70
Hình 4.34 Giao diện sửa tin 71
Trang 20DANH MỤC BẢNG
Bảng 4.1 Bảng danh sách người dùng 34
Bảng 4.2 Bảng danh sách Usecase 35
Bảng 4.3 Bảng danh sách các Collection có trong hệ thống 58
Bảng 4.4 Bảng mô tả Collection field 59
Bảng 4.5 Bảng mô tả Collection fieldDetail 59
Bảng 4.6 Bảng mô tả Collection User 60
Bảng 4.7 Bảng mô tả Collection Token 60
Bảng 5.1 Bảng kiểm thử giao diện 74
Bảng 5.2 Bảng kiểm thử chức năng 76
Trang 21TÓM TẮT KHÓA LUẬN
- Tổng quan đề tài: đặt vấn đề, lý do chọn đề tài, phát biểu bài toán, mục tiêu và phạm
vi tiếp cận đề tài
- Tìm hiểu thực trạng, thị trường, khả năng phát triển
- Phân tích các dịch vụ hệ thống website thông tin bất động sản trên thị trường
- Tìm hiểu và áp dụng các công nghệ, cấu trúc mới để xây dựng hệ thống chia sẻ thông tin bất động sản
- Phát triển hệ thống với các tính năng cơ bản dựa trên các hệ thống liên quan, thêm những tính năng nâng cao để tăng tính tiện lợi cho người dùng và tạo sự khác biệt
- Giải quyết bài toán về độ tin cậy của thông tin bất động sản được chia sẻ, tăng tính tương tác cho người dùng với hệ thống
- Trình bày kết luận và hướng phát triển đồ án
Trang 22Chương 1 TỔNG QUAN
1.1 Đặt vấn đề
Hiện nay công nghệ thông tin đang phát triển mạnh mẽ và ngày càng phổ biến, tác động đến mọi mặt của xã hội Đồng thời nhu cầu nhà ở chỗ sinh hoạt là nhu cầu cấp thiết hàng ngày của con người, đặc biệt là thời nay, khi ai cũng muốn có một căn phòng riêng để tiện sinh sống Nắm bắt được xu thế này, các công ty, doanh nghiệp,
tổ chức, cá nhân nói chung đã ứng dụng công nghệ thông tin vào việc thu thập, chia
sẻ thông tin nhà đất giúp cho mọi người dễ dàng tìm kiếm nơi ở phù hợp và nhanh chóng Nhưng với thực trạng thông tin hiện nay, rất nhiều trang web chia sẻ về thông tin bất động sản một cách tràn lan khiến người dùng hoang mang về thông tin loại hình dịch vụ mà họ cần song song đó là những mối lo về tài chính và những thông tin không đúng sự thật
Nhận thấy được những hạn chế của việc quản lý thông tin buôn bán bất động sản qua những từ giấy phát ngoài đường, hay những thông tin một chiều trên mạng không có tính xác thực cao Chính vì lẽ đó mà nhóm em đã thảo luận về vấn đề trên và quyết định xây dựng một hệ thống thông tin bất động sản mới để giải quyết thực trạng trên, ngoài ra giúp cho mọi người thuận tiện trong việc tìm kiếm thông tin bất động sản hơn
1.2 Phát biểu bài toán
1.2.1 Giới thiệu hệ thống website “Tìm kiếm và chia sẻ thông tin bất
động sản”
- Hệ thống sẽ thu thập, rút trích có chọn lọc thông tin bất động sản một cách hiệu quả bao gồm: nội dung, giá cả, địa chỉ, thông tin chi tiết, hình ảnh của bất động sản, của trang bất động sản nổi tiếng hiện nay đó là: batdongsan.com.vn, alonhadat.com.vn, mogi.vn Sau đó sắp xếp và lưu trữ thông tin một cách có hệ thống
Trang 23để dễ dàng sử dụng và chia sẻ thông tin tới khách hàng một cách hợp lý (rõ ràng, dễ nhìn, dễ đọc) và có lợi ích đối với khách hàng
- Hệ thống giúp khách hàng không phải đi đến từng trang web nêu trên để tìm kiếm thông tin khi cần thiết mà chỉ cần truy cập vào trang web là đủ
- Website có công cụ sắp xếp một cách hiệu quả giúp người dùng cần tìm một số thông tin một cách nhanh nhất có thể, ví dụ tìm theo: lượt thích nhiều nhất, lượt bình luận nhiều nhất, mới nhất
- Website có công cụ tìm kiếm một cách hiệu quả giúp người dùng cần tìm một số thông tin một cách nhanh nhất có thể, ví dụ tìm theo: loại nhà đất, địa chỉ bất động sản, giá cả bất động sản,
- Hệ thống còn cho phép người dùng đăng thông tin bất động sản của mình lên để chia sẻ rộng rãi tới những người dùng khác và những khách hàng tìm năng
- Trên mỗi tin tức được chia sẻ, hệ thống cho phép người dùng vào bày tỏ trạng thái như Thích, Bình luận lên bài viết giúp bài viết có tính tin cậy hơn, không còn là thông tin từ một chiều Ngoài ra còn có 2 icon thêm vào danh sách ưa thích hoặc bỏ khỏi danh sách ưa thích Tính năng này giúp người dùng khi thấy những thông tin nhà đất
mà có hứng thú sẽ lưu lại để tiện theo dõi
- Ngoài ra, trên mỗi tin tức được chính người dùng chia sẻ trên hệ thống, người dùng
sẽ có quyền sửa hoặc xoá tin tức đó nếu thấy nội dung cung cấp bị sai lệch, và người quản trị là người có quyền sửa hoặc xoá toàn bộ tin tức, để khi có ai đó báo cáo sai lệch về tin tức nào, người quản trị sẽ trực tiếp sửa hoặc gỡ bỏ
1.2.2 Khảo sát hệ thống liên quan
- Nhóm đã tham khảo nhiều hệ thống website bất động sản như batdongsan.com.vn, alonhadat.com.vn, mogi.vn
- Hầu hết các website đề chia sẻ thông tin bất động sản, cho phép tìm kiếm loại hình bất
Trang 24động sản mà người dùng quan tâm, cho phép đăng bài rao bán về bất động sản của người dùng nhưng những thông tin website cung cấp đều mang tính một chiều, người dùng không có khả năng xác thực tính an toàn hay đúng đắn của thông tin, khiến cho việc tìm kiếm trở nên mơ hồ Chính vì lẽ đó hệ thống sẽ đưa chức năng cải thiện những vấn đề trên và đặc biệt hơn nữa là thiết kế một website mang tính đột phá như một trang mạng
xã hội về bất động sản cho phép người dùng đăng bài, thích và bình luận đối với những tin họ cần quan tâm
1.3 Mục tiêu và phạm vi đề tài
1.3.1 Mục tiêu
- Xây dựng một website trên nền tảng web với mục đích chính là tìm kiếm và chia sẻ thông tin bất động sản trên trang alonhadat.com.vn
- Xây dựng chức năng thích – bình luận bài viết như trang mạng xã hội
- Xây dựng chức năng thêm vào danh sách ưu thích để tiện cho người dùng
- Xây dựng chức năng thêm vào danh sách ưu thích để tiện cho người dùng
- Xây dựng chức năng thêm vào danh sách ưu thích để tiện cho người dùng
- Xây dựng server theo thời gian thực, cập nhật các thông tin bài viết người dùng đăng hoặc chia sẻ
- Xây dựng chức năng đăng thông tin bất động sản
- Xây dựng chức năng cập nhật và xoá thông tin bất động sản
- Xây dựng chức năng đăng nhập và hệ thống người dùng để tăng tính bảo mật
- Xây dựng chức năng tìm kiếm thông tin bất động sản cơ bản và nâng cao
- Xây dựng chức năng sắp xếp với các yêu cầu cơ bản để giúp người dùng tiện trong
Trang 25lúc tìm kiếm thông tin
- Xây dựng hệ thống chatbot giữa người dùng và hệ thống
• Quản lý thông tin người dùng
• Quản lí thông tin bất động sản
• Quản lí bài viết của người dùng
• Tìm kiếm thông tin loại hình bất động sản
• Sắp xếp thông tin bất động sản
• Cập nhật thông tin bất động sản mới nhất
• Cho phép người dùng thích và bình luận như trang mạng xã hội
Trang 261.3.4 Kết quả dự kiến
- Hoàn thành website cung cấp thông tin bất động sản
- Hoàn thành chức năng cho phép người dùng lưu vào danh sách ưa thích
- Hoàn thành chức năng tìm kiếm và sắp xếp tin tức
- Hoàn thành chi tiết về 1 thông tin bất động sản
- Hoàn thành chức năng thích và bình luận về tin tức cụ thể
- Hoàn thành chức năng trò chuyện, cho phép người dùng trao đổi trực tiếp bot
Trang 27Chương 2 CƠ SỞ LÝ THUYẾT
2.1 Cherrio
2.1.1 Khái niệm
Cheerio là một thư viện của Nodejs để làm việc với HTML ở server Nó cung cấp một API rất thuận tiện để truy xuất và thao tác dữ liệu, sử dụng các phương thức tốt nhất của DOM, CSS và jquery
2.1.2 Tại sao nên sử dụng Web crawler
Cheerio phân tích HTML sang cùng một DOM như các trình duyệt hiện đại thực hiện
- Phân tích HTML từ một URL, tệp hoặc chuỗi
- Tìm và trích xuất dữ liệu, sử dụng bộ chọn DOM hoặc CSS
- Thao tác các yếu tố, thuộc tính và văn bản HTML
Cheerio được thiết kế để làm việc hiệu quả đối với tất cả các loại HTML từ đơn giản cho đến phức tạp Jsoup sẽ tạo ra một cây phân tích hợp lý để ta có thể bốc tách dữ liệu
2.1.3 Áp dụng Cheerio vào đề tài
Nhóm chúng em sử dụng Cheerio để truy xuất, bốc tách dữ liệu từ hai trang web nổi tiếng: alonhadat.com.vn, mogi.vn nhằm mục đích xây dựng dữ liệu ban đầu cho trang web
2.2 MongoDB
2.2.1 Giới thiệu về MongoDB
MongoDB là phần mềm cơ sở dữ liệu mã nguồn mở NoSQL hỗ trợ đa nền tảng được thiết kế theo hướng đối tượng Vì thế, nó có thể dùng để lưu trữ dữ liệu có cấu trúc
Trang 28phức tạp và đa dạng Dữ liệu được gọi là Big Data Đặc biệt, chương trình này lưu trữ dữ liệu vào collection theo hướng tài liệu kiểu JSON thay vì bảng nên có hiệu suất cao và tính khả dụng cao
Trong khái niệm của MongoDB có nhắc đến NoSQL, vậy NoSQL (Non-Relational SQL) là dạng cơ sở dữ liệu mã nguồn mở được ra đời như một mô hình tiến bộ hơn
về tốc độ, tính năng,… so với hệ quản trị cơ sở dữ liệu quan hệ RDBMS NoSQL có kiểu dữ liệu JSON Đây là dạng dữ liệu kiểu key và value cùng với hiệu suất nhanh
và khả năng mở rộng không bị ràng buộc bởi việc tạo khóa ngoại, khóa chính,… nên được ưa chuộng và sử dụng rất phổ biến
Với NoSQL, có thể mở rộng dữ liệu một cách thoải mái mà không phải lo lắng về khóa ngoại hay là khóa chính, hoặc các công việc như là kiểm tra ràng buộc như hệ quản trị cơ sở dữ liệu truyền thống
Ưu điểm: NoSQL giải quyết được các vấn đề dữ liệu lớn (big data) về các hệ thống
thông tin hoặc là phân tán dữ liệu
Nhược điểm: cũng từ ưu điểm trên, do không hạn chế việc mở rộng dữ liệu nên nó
tồn tại một số nhược điểm như là: sự phụ thuộc vào từng bản ghi, tính nhất quán hoặc
là đặc tính toàn vẹn dữ liệu
2.2.2 Tại sao nên sử dụng hệ quản trị cơ sở dữ liệu MongoDB
Ưu điểm:
- Đầu tiên có thể nhắc đến là tính linh hoạt lưu trữ dữ liệu theo các kích cỡ khác nhau,
dữ liệu dưới dạng hướng tài liệu JSON nên bạn có thể chèn vào thoải mái bất cứ thông tin gì bạn muốn
- Khác với RDBMS, dữ liệu trong đây không có sự ràng buộc và không có yêu cầu
tuân theo khuôn khổ nhất định, điều này giúp bạn tiết kiệm thời gian cho việc kiểm tra sự thỏa mãn về cấu trúc nếu muốn chèn, xóa, cập nhật hay thay đổi các dữ liệu trong bảng
Trang 29- MongoDB dễ dàng mở rộng hệ thống bằng cách thêm node vào cluster – cụm các node chứa dữ liệu giao tiếp với nhau
- Ưu điểm thứ tư là tốc độ truy vấn nhanh hơn nhiều so với hệ quản trị cơ sở dữ liệu
quan hệ RDBMS do dữ liệu truy vấn được cached lên bộ nhớ RAM để lượt truy vấn
sau diễn ra nhanh hơn mà không cần đọc từ ổ cứng
- Cũng là một ưu điểm về hiệu suất truy vấn của MongoDB, trường dữ liệu “_id” luôn được tự động đánh chỉ mục để đạt hiệu suất cao nhất
Tại sao nên sử dụng MongoDB:
- Khi website có tính chất INSERT cao, bởi vì mặc định MongoDB có sẵn cơ chế ghi với tốc độ cao và an toàn
- Khi website ở dạng real-time nhiều, nghĩa là nhiều người cùng thao tác với ứng dụng trong thời gian thực Ví dụ như ứng dụng chat hay stream trực tuyến chẳng hạn
- Với website có nhiều dữ liệu, giả sử ứng dụng web có đến 10 triệu bản ghi thì khá khó khăn để query được với Mysql Chọn MongoDB vì MongoDB có khả năng tìm kiếm thông tin liên quan cũng khá nhanh nên trường hợp này nên dùng nó
Trang 302.2.3 Áp dụng MongoDB vào đề tài
Nhờ những tính năng nổi trội của MongoDB, nhóm đã sử dụng MongoDB dùng làm
hệ quản trị cơ sở dữ liệu chính Server sử dụng MongoDB để lưu trữ toàn bộ dữ liệu,
dữ liệu này sẽ được server sử dụng REST API để gọi lên
2.3 Webhook
2.3.1 Giới thiệu về Webhook
Webhook là một công nghệ rất tiện dụng trong việc triển khai các phản ứng sự kiện (event) trên website của bạn Webhook cung cấp một giải pháp giúp ứng dụng server-side thông báo cho ứng dụng phía client-side khi có sự kiện phát sinh đã xảy ra trên máy chủ (event reaction) Cũng chính vì vậy, ứng dụng client-side sẽ không cần phải liên tục hỏi hoặc check với ứng dụng server-side
Nhiều người cũng thường gọi Webhook là “Reverse APIs” Thông thường đối với các API, ứng dụng client-side sẽ gọi ứng dụng server-side Tuy nhiên khi có webhook, server gọi Webhook (thường là POST HTTP request) tới endpoint URL được cấu hình trước đó cho Webhook bởi client cung cấp và client sẽ xử lý kết quả được trả
về, ví dụ: ứng dụng server-side gọi ứng dụng client-side
2.3.2 Tại sao nên sử dụng Webhook
Webhook thường được sử dụng để thực hiện các yêu cầu và nhiệm vụ nhỏ
Webhook thường được các lập trình viên sử dụng để cập nhất các event theo thời gian thực một cách tiết kiệm tài nguyên nhất có thể Cũng chình vì vậy mà Webhook được
sử dụng trong trường hợp này
Webhook còn đường dùng qua API là khi API của bạn không tốt lắm hoặc thậm chí
là không có API để bắt đầu Vì vậy thông qua Webhook, bạn có thể tạo một giải pháp cung cấp dữ liệu mà ứng dụng của bạn cần để hoạt động ngay một cách trơn tru nhất
Trang 31Có một lưu ý nhỏ thế này, tuy Webhook khá linh động nhưng nếu nó không được sử dụng thường xuyên để call dữ liệu (vì nó chỉ hoạt động khi có dữ liệu hoặc event mới trên hệ thống), nên dẫn đến khả năng sẽ không thể lấy được các bản cập nhật mới nhất nếu hệ thống dừng hoạt động vì một lý do bất chợt nào đó
Ngoài ra, phải chấp nhận tổng lưu lượng dữ liệu có sẵn với bản cập nhật đã cho vì có
ít quyền kiểm soát chúng
Hình 22.1 Quy trình làm việc của Webhook
Trang 322.3.3 Áp dụng Webhook vào đề tài
Trong hệ thống ứng dụng của nhóm, Webhook được áp dụng trong phần tin nhắn của facebook, khi người dùng nhắn tin vào Messenger, Webhook sẽ nhận tin nhắn đó và gửi về con bot mà nhóm đã cài đặt, con bot nhận được tin nhắn sẽ tự động trả lời lại theo hiểu biết của bot
2.4 Dialogflow
2.4.1 Giới thiệu về Dialogflow
Dialogflow (tiền thân là API.AI) là một dịch vụ sau khi được Google mua lại vào tháng 9 năm 2016 Tiền thân là một công ty nổi tiếng với trợ lý ảo Speaktoit, cung cấp nhằm giúp các lập trình viên dễ dàng hơn khi lập trình các sản phẩm có giao tiếp giữa người dùng với sản phẩm thông qua các đoạn hội thoại bằng văn bản (text) hoặc giọng nói (voice) Nói cách khác, Dialogflow là một framework cung cấp các dịch vụ NLP / NLU (Natural Language Processing / Natural Language Understanding) - xử
lý ngôn ngữ tự nhiên
2.4.2 Tại sao nên sử dụng Dialogflow
Dialogflow cho phép tạo ra các kịch bản một cách dễ dàng kèm theo đó là Dialogflow cũng được phát triển trên mền Machine Learning nên hoàn toàn có thể dạy cho con Bot biết cách xử lý các trường hợp, ngữ cảnh khác nhau
Dialogflow hiện có sẵn các kịch bản và Dialogflow cũng được lập trình khá tốt với lượng dữ liệu khá đồ sộ Nhưng hiện tại Dialogflow chỉ làm việc tốt với Tiếng Anh
và một số tiếng của các nước đông dân khác Ngoài ra Dialogflow còn cho phép tích hợp Chatbot với Messanger hay Skype hay Slack… một cách rất đơn giản
Dialogflow bao gồm khả năng học máy để cải thiện hơn nữa việc phát hiện các ý định
từ những phát biểu của người dùng Mục đích bao gồm các phần nối tiếp: người dùng
Trang 33nói, hệ thống hành động, phản hồi Các câu nói của người dùng có thể được viết ở chế độ mẫu hoặc ví dụ mẫu Chế độ mẫu được viết bằng ngôn ngữ tự nhiên và có thể được chú thích cho các tham số Trong chế độ mẫu, các tham số được tham chiếu trực tiếp trong các lời nói và chúng không cần phải chú thích
Hình 2.2 Quy trình thực hiện của Dialogflow
2.4.3 Áp dụng Dialogflow vào đề tài
Trong hệ thống ứng dụng của nhóm, Dialogflow được áp dụng để tích hợp chatbot vào trong ứng dụng, con bot sẽ tự động nhận biết tin nhắn mà người dùng hỏi, sau đó quy xét với những từ mà nhóm đã cài đặt sẵn để có thể trả lời phù hợp
2.5 REST
2.5.1 Giới thiệu về REST
REST là viết tắt của từ “Representational State Transfer”, trong tiếng Việt có nghĩa
là “Chuyển trạng thái trình bày” Những người theo chủ nghĩa thuần túy viết tắt thường viết nó là ReST, vì chữ E trong REST không thực sự đại diện cho bất cứ điều
gì Nó chỉ là chữ cái thứ hai của từ “Representational” Điều này tránh những tranh
Trang 34cãi về cách phát âm nó, giống như vấn đề đã gây khó khăn cho GIF trong những năm gần đây Với chữ E bao gồm, không có sự nhầm lẫn khi phát âm từ viết tắt chính xác hơn của RST là cổ tay “wrist” hoặc thậm chí là R-S-T
REST là một kiến trúc mạng lần đầu tiên được ghi lại bởi Roy Fielding trong luận án
tiến sĩ của ông có tiêu đề “Architectural Styles and the Design of Network-based Software Architectures”, được xuất bản vào năm 2000 – nhà khoa học, nhà đồng sáng lập giao thức REST là một chuẩn kiến trúc trong việc thiết kế hệ thống phân tán (distributed system) mà sử dụng các ràng buộc, quy ước chặt chẽ REST là một phương thức nhỏ gọn nên rất được ưa chuộng cho dữ liệu dạng HTTP request REST cho phép máy khách (Clients) tương tác với dữ liệu được lưu trữ trên máy chủ (Servers) mà không cần phải có bất kỳ kiến thức trước nào về máy chủ hoặc những
gì tồn tại trên đó Chính vì thế REST dần phổ biến và được xem là lựa chọn ưu tiên cho lập trình API Thông thường, REST được dùng cho ứng dụng web và dùng để giao tiếp giữa các ứng dụng di động
Các ứng dụng sử dụng kiến trúc REST thì được gọi là ứng dụng phát triển theo kiểu RESTful
REST tuân thủ theo 4 nguyên tắc thiết kế cơ bản sau:
- Sử dụng các phương thức HTTP một cách rõ ràng: REST đặt ra một quy tắc yêu cầu các nhà phát triển sử dụng một cách rõ ràng các phương thức HTTP và nhất quán với cách mà chúng được định nghĩa Quy tắc này của REST giúp thiết lập ánh xạ một một giữa các hành động tạo, đọc, cập nhật, xóa với các phương thức HTTP Theo đó
sẽ có:
• Để tạo một tài nguyên trên server ta dùng phương thức POST
• Để lấy (đọc) một tài nguyên trên server ta dùng phương thức GET
• Để cập nhật tài nguyên trên server ta dùng phương thức PUT
• Để xóa tài nguyên trên server ta dùng phương thức DELETE
Trang 35- Phi trạng thái (Stateless interation): Trong thiết kế của REST, server sẽ không lưu giữ bất cứ trạng thái trong giao tiếp REST không quản lý phiên làm việc, session được lưu ở phía client Điều này nghĩa là nếu server nhận được 2 request khác nhau
từ cùng 1 client, nó sẽ không ghi nhớ bất cứ thông tin gì về request thứ nhất khi mà phục vụ request thứ 2 Do vậy mỗi client nên mang toàn bộ thông tin cần thiết cho một hanh động mà client muốn server thực hiện Trong mạng RESTful, server chịu trách nhiệm đưa ra các phản hồi và cung cấp cách thức cho phép client duy trì trạng thái của chinh nó
Hình 2.3 Phi trạng thái trong Restful
- Hiển thị cấu trúc thư mục như các URL: REST đưa ra một cấu trúc để người dùng
có thể truy cập vào tài nguyên của nó thông qua các URL.Loại URL này có phân cấp,
có gốc là một đường dẫn đơn, các nhánh từ gốc là các đường dẫn phụ dẫn đến các vùng service chính
- Truyền tải JSON, XML hoặc cả hai: REST cung cấp nhiều đại diện biểu diễn tài nguyên cho các request khác nhau Một vài dạng MIME thông dụng của REST như JSON, XML, XHTML
Trang 362.5.2 Tại sao nên sử dụng REST
Hiện nay REST đang dần được sử dụng rộng rãi vì sự đơn giản và dễ sử dụng hơn rất nhiều của REST Nhìn vào các nguyên tắc của REST đã nói ở trên chúng ta có thể dễ dàng nhận thấy được những lợi ích khi sử dụng REST:
- Mặc dù các quy tắc sử dụng các phương thức HTTP là không bắt buộc nhung khi tuân thủ sẽ giúp mọi thứ trở nên rõ ràng, dễ hiểu, tạo sự thống nhất trong công việc giữa các lập trình viên
- Phi trạng thái giúp hệ thống dễ phát triển, bảo trì, mở rộng vì không cần tốn công CRUD trạng thái của client và quan trọng hơn là tách biệt client khỏi sự thay đổi của server Ngoài ra, khi mà số lượng client tăng lên, server không đủ khả năng và sẽ tiêu tốn rất nhiều thời gian để kiểm tra toàn bộ các client giao tiếp với nó Vì vậy phi trạng thái là cần thiết để đảm bảo hiệu suất hoạt động cho toàn bộ hệ thống
- Với URL có cấu trúc như thư mục cho phép nhà phát triển dễ dàng trong việc cài đặt service của mình hướng vào một loại tài nguyên cụ thể
- REST cho phép nhiều định dạng dữ liệu khác nhau Chính điều này cho phép REST
hỗ trợ tốt hơn, các service sử dụng bởi các client viết bởi các ngôn ngữ khác nhau, chạy trên nhiều nền tảng và thiết bị khác nhau
Trang 37Hình 2.4 Các nền tảng mà REST hỗ trợ
2.5.3 Áp dụng REST vào đề tài
Trong hệ thống server của nhóm, REST được áp dụng để server xây dựng thống nhất các API giúp dễ dàng cho việc kết nối ứng dụng với server thông qua các API đã định nghĩa sẵn này
Trang 382.6 Nodejs
2.6.1 Giới thiệu về Nodejs
NodeJS là một nền tảng được xây dựng trên V8 JavaScript Engine – trình thông dịch thực thi mã JavaScript, giúp xây dựng các ứng dụng web một cách đơn giản và dễ dàng mở rộng
NodeJS được phát triển bởi Ryan Dahl vào năm 2009 và có thể chạy trên nhiều hệ điều hành khác nhau: OS X, Microsoft Windows, Linux
Phần Core bên dưới của Nodejs được viết hầu hết bằng C++ nên cho tốc độ xử lý và hiệu năng khá cao
Nodejs tạo ra được các ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực
Nodejs áp dụng cho các sản phẩm có lượng truy cập lớn, cần mở rộng nhanh, cần đổi mới công nghệ, hoặc tạo ra các dự án Startup nhanh nhất có thể
2.6.2 Tại sao nên sử dụng Nodejs
Các ứng dụng Nodejs được viết bằng javascript, ngôn ngữ này là một ngôn ngữ khá thông dụng Theo tác giả của ngôn ngữ Javascript, Ryan Dahl: “Javascript có những đặc tính mà làm cho nó rất khác biệt so với các ngôn ngữ lập trình động còn lại, cụ thể là nó không có khái niệm về đa luồng, tất cả là đơn luồng và hướng sự kiện.”
Tốc độ xử lý nhanh Nhờ cơ chế xử lý bất đồng độ (non-blocking), NodeJS có thể xử
lý hàng ngàn kết nối cùng lúc mà không gặp bất cứ khó khăn nào
Dễ dàng mở rộng Nếu bạn có nhu cầu phát triển website thì tính năng dễ dàng mở rộng của NodeJS là một lợi thế cực kỳ quan trọng
Các ứng dụng NodeJS đáp ứng tốt thời gian thực và chạy đa nền tảng, đa thiết bị
Node.js sử dụng một mô hình luồng duy nhất với sự kiện lặp cơ chế tổ chức sự kiện giúp các máy chủ để đáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả
Trang 39năng mở rộng như trái ngược với các máy chủ truyền thống mà tạo đề hạn chế để xử
lý yêu cầu Node.js sử dụng một chương trình đơn luồng và các chương trình tương
tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu cầu máy chủ truyền thống như Apache HTTP Server
Hình 2.5 Blocking I/O (trái) và Non-Blocking I/O (phải)
2.6.3 Áp dụng Nodejs vào đề tài
Trong hệ thống ứng dụng của nhóm, Nodejs được áp dụng để làm phần backend cho hệ thống, vì những ưu điểm của Nodejs dành cho một ứng dụng nhỏ rất
là tiện lợi đặc biệt là tốc độ xử lí
2.7 ExpressJS framework
2.7.1 Giới thiệu về ExpressJS
Express js là một Framework nhỏ, nhưng linh hoạt được xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile
Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên không phải lo lắng khi làm việc với Framework này
Trang 40Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS như một core function, chẳng hạn: SailsJS, MEAN,
Hình 2.6 Cấu trúc của ExpressJs
- Folder routes: chứa các route có trong ứng dụng
- Folder view: chứa view/template cho ứng dụng
- Folder public chứa các file css, js, images, cho ứng dụng