
Gần đây, tôi đã tổ chức một trò chơi và tặng ARM NB F80. Tôi đã phát triển một công cụ bằng Node.js để lấy những bình luận từ bài viết trên Mytour, sau đó chọn ngẫu nhiên người may mắn. Hôm nay, tôi muốn chia sẻ với bạn quá trình tạo ra công cụ GA này.
Tôi đã chia sẻ về quá trình học lập trình tại đây:
Node.js là gì
Node.js được tạo dựa trên engine Javascript V8, cho phép sử dụng Javascript để lập trình phía máy chủ.Thường xuyên viết mã Javascript cho trang web cá nhân và Script Ứng dụng (dùng cho hệ thống dữ liệu), nên việc tìm hiểu về Node.js không tốn quá nhiều thời gian. Chỉ cần làm quen với các khái niệm mới để làm việc trên máy chủ.
Bài toán được đặt ra
Mình tạo một bài đăng trên Mytour và chia sẻ vào nhóm LG IT để mọi người comment, đủ 1k comment sẽ quay số.Trước đó, mình định thực hiện việc quay số thủ công bằng file Excel. Mỗi trang bài viết sẽ có 19 comment. Vì thế, tính toán thì danh sách sẽ như sau:
Khi đã quay số trên random.org xong, chỉ cần xác định số đó nằm ở trang nào và đếm số lượng comment để chọn ra người may mắn. Tuy nhiên, mình nhận thấy cách làm này không phù hợp với Mytour, vì vậy mình đã quyết định thay đổi sang việc tạo Tool.
Mình đã tạo ra một phác thảo Tool trong đầu:- Có một ô để nhập link bài viết trên Mytour và một ô để nhập số trang
- Khi nhấn nút, Tool sẽ tự động lấy dữ liệu comment về
- Dữ liệu sẽ bao gồm link profile của thành viên, được đánh số thứ tự để dễ dàng thực hiện việc random
- Nếu một thành viên comment nhiều lần, Tool sẽ tự động lọc để đảm bảo tỉ lệ thắng giải của mọi người là như nhau
Quá trình thực hiện
*Đây không phải là hướng dẫn chi tiết về mã nguồn, chỉ là một sự giải thích đơn giản để người đọc mới có thể hiểu. Bởi vì mình chỉ là người mới bắt đầu, nên không đi sâu vào mã nguồn.puppeteer/puppeteer: Giao diện Node.js của Chrome ẩn (github.com)
Sử dụng Visual Studio Code, từ ý tưởng đến việc code hoàn chỉnh mất khoảng 3 giờ sau khi tìm hiểu tài liệu và xem video hướng dẫn trên Youtube.
Cách hoạt động


Sau khi sử dụng tính năng Inspect, tôi nhận ra rằng đoạn link mà tôi cần lấy có dạng: /profile/[tên thành viên]
Nó được chứa trong một thẻ div có class được gán là “jsx-691990575”.

Sau khi nhập link và số trang vào Tool và nhấn Submit:
- Phần Puppeteer sẽ mở link trong một trình duyệt ẩn danh
- Nó sẽ lần lượt mở từng trang và lấy link profile của các thành viên comment, sau đó đưa vào một mảng (Array) - tức là một hộp chứa kết quả
- Quá trình này sẽ tiếp tục cho tất cả các trang còn lại (bài viết có 1054 comment trải đều trên 54 trang)
- Khi đã lấy hết dữ liệu từ các trang, Tool sẽ hiển thị kết quả tổng hợp

Sau khi lấy dữ liệu từ bài viết có 1054 comment, mình thu được 975 comment sau khi lọc những nick comment nhiều lần. Sau đó, sử dụng random.org để chọn ra số may mắn từ 1 đến 975. Số may mắn lần này là 859 (bạn Kiên Vũ, đến từ Hà Nội).
Cách thức tương tự có thể áp dụng để lấy dữ liệu từ các nguồn khác như Facebook, tuy nhiên phức tạp hơn rất nhiều. Khi có cơ hội, mình sẽ thử nghiệm và chia sẻ kết quả với mọi người.
Qua quá trình giải quyết bài toán làm Tool GA, mình nhận thấy:
- Biết lập trình sẽ giúp bạn tạo ra các công cụ để giải quyết công việc một cách thú vị hơn,
- Tool này được tạo ra để hỗ trợ các mod, khacten trong việc làm Game GA → mang lại sự giúp đỡ cho cộng đồng xung quanh,
- Sử dụng Javascript để lập trình server-side (một điều mà trước đây tôi chưa từng thử), mở ra cơ hội học các ngôn ngữ server-side khác như Golang.
Xin cảm ơn các bạn đã đọc bài viết, hy vọng nó sẽ hữu ích cho mọi người ạ ^^
