Helu các bạn mình đang tận hưởng kì nghỉ 30/5 1/5 cùng với những dòng code bất tận ?? ?? thực ra là ngay khi kỳ nghỉ lễ bắt đầu mình đã có ý tưởng code 1 extension cho chrome để trợ giúp các thầy cô giáo import file excel nhập điểm lên trang giaoducdientu. Tuy nhiên cái đó đã bị tạm dừng chút để nhường chỗ cho 1 công việc gay cấn hơn nhiều
Vào vấn đề chính, như nhiều bạn đã biết thì hqua mình đã hợp tác cùng BTC MUC để tính kết quả vote qua fb, cụ thể là mình tính lượt share bằng app có sẵn (app được improve từ version đã từng dùng cho TOP).
Kết quả thật bất ngờ khi lượt share app tính ra lệch hẳn so với kỳ vọng của đa số mọi ng ??  ??
Nhưng mà nói sao đc khi app chỉ làm chính xác những gì con người làm. Và nếu ko có app tính mà người tính thủ công thì cũng đâu cải thiện gì hơn..

—————-

Bài viết này sẽ đc chia làm 3 phần chính:
1. Giải thích cách hoạt động của app
2. Lời khuyên, lời kết
3. Ví dụ về 1 lỗi của facebook

—————–

1. Giải thích cách hoạt động của app

** Cảnh báo khó hiểu. Phần 2 tóm gọn và dễ hiểu hơn okay ??  ?? **
phần giải thích đc chia ra làm 2 phần tương ứng với 2 app nhỏ:
a. lấy dữ liệu từ facebook về làm bằng chứng
Đây là 1 app mình mất khá nhiều tgian và công sức nên mình sẽ ko chia sẻ mã nguồn tại đây.
Dữ liệu được app lấy tại trang ví dụ như: https://www.facebook.com/shares/view?id=202691990245623
Hãy để ý bằng F12, mỗi khi cuộn xuống fb sẽ gọi 1 pagelet mới. pagelet chính là 1 dạng pipeline được sử dụng rộng rãi trong fb để chia 1 trang dài ra thành nhiều phần nhỏ:

F12 > Network
Và sau cùng chỉ còn là lọc dữ liệu bằng regexp /href=.{4}((?!muc17)([^-]*))-utime=\\\ »[0-9]+/g, lưu vào và chờ bước sau xử lý.
Bằng cách kiểm tra lại với việc cuộn bằng tay, mình có thể chắc chắn việc lọc trên là đủ và thậm chí là hơi… thừa (nó lọc cả các bài share vào group ?? 😀 ?? ).
b. Xử lý số liệu:
Thật ngại vì source code xấu xí của phần này :’( nhưng dù sao nó vẫn chạy ổn định 🙂 https://pastebin.com/L381FXFR
Do mình sử dụng chung template với phần a nên có khá nhiều đoạn thừa trong code. Ở đây chúng ta sẽ chỉ quan tâm đến đoạn processMe(i) và addNoDuplicate(day, pid):
Đoạn này: var day = (e.match(/[0-9][0-9] avril/g)[0]).substring(0,2); sẽ tách lấy phần ghi ngày tháng của post, ví dụ 25 avril hay 26 avril.
var usr = e.match(/\\\ »\\\/[^\\]*/gi); tách lấy phần đầu chứa id/nick name fb, ví dụ như \ »\/CNH.P2.Wind\ » là fb của bạn Phong hay \ »\/thanhhuongg99\ » là fb của bạn Thanh Hương.
2 thông số này đc truyền vào addNoDuplicate. đây thực chất là 1 function được mình dùng rất nhiều, nó có trong cả phần thống kê của chatbot hay thậm chí nhiều lúc lười dùng remove duplicate của excel, GROUP BY của SQL, mình đều dễ dàng dùng cái này 😉

biến tạm temp_db và TOTAL sẽ đc xóa đi sau mỗi lần print kết quả của 1 lớp
function này thêm vào temp_db với các child name ngày tháng đã đc tách ra từ trên. child data là 1 mảng gồm các string là tên id/nickname fb.

2. Lời khuyên, lời kết

Trước hết, về phía 1 người bình thường mà nói, mình hoàn toàn ko muốn 1 cuộc thi mang tính chất gắn kết trong trường thế này lại trở thành lí do để các lớp nghi ngờ nhau *mặt nghiêm trọng*
T đã khá hối hận khi ko thể làm quen đc với nhiều người, từ nhiều lớp hơn trước khi ra trường. Và t tạo ra chatbot vì lí do như thế. Vì tgian trôi nhanh lắm, đừng lãng phí nó nữa 🙂

Về mặt cả mình và BTC cần rút kinh nghiệm, thực sự là việc vote qua like hay share trên fb rất rất dở và như các bạn thấy trong k&q vừa rồi mình đã bỏ luôn cả share. Lý do vì:

Vấn đề với facebook, nó là 1 cỗ máy to đùng và các dev ko cách nào khác bằng việc dùng “mánh”, hay theo dõi nhu cầu của người dùng để nên làm cái gì chạy chính xác => tốn thời gian xử lý hơn, và cái gì chỉ nên làm qua loa => nhường tgian xử lý cho cái khác.

Like và share là 1 thứ như vậy. Ai cx muốn stt, post của mình nhiều like/share hết, chẳng cần biết ai đã like, nên chính bản thân facebook cũng thực sự chẳng làm tốt phần đếm này. Vì vậy, dù cho có kiểm tra, tính điểm bằng cách nào đi nữa thì cũng ko có gì gọi là “kết quả chính xác tuyệt đối”. Ở phần 3 tiếp theo này mình sẽ demo 1 lỗi nhỏ để chứng minh điều đó.

KẾT LẠI thì đây là 1 bài học ko chỉ cho MUC hay SAC hay mình mà còn cho tất cả những contest tiếp theo của các CLB.
BTW, mình đã phát triển 1 phương pháp vote mới sử dụng CAPTCHA, đếm theo lượt cmt và like (rất tiếc k còn đếm lượt share nữa) và hiệu quả tránh gian lận cao hơn. Trong tương lai, các CLB có thể liên hệ với mình nếu muốn triển khai. Rất mong đc hợp tác cùng các bạn.

3. Một lỗi nhỏ của fb:

Dù kết quả nào đi chăng nữa thì cx ko vừa lòng tất cả mọi người. Mình sẽ để video ở đây và ko nói gì thêm.

https://youtu.be/zGQOFM3nt7w

link tới post đc test: https://www.facebook.com/cnh.chatbo…