Viết Mã Nguồn Tự động Thông Báo điểm UIT (Phần 1)
Có thể bạn quan tâm
Hôm nay mình sẽ hướng dẫn các bạn viết ứng dụng thông báo điểm học tập trên UIT. Hệ thống sẽ thông báo thông qua email, Messenger facebook.
Bài viết này gồm 2 phần:
Phần 1: Nói sơ về cách xử lí và một số thư viện cần dùng
Phần 2: Mã nguồn hoàn chỉnh và cách cài đặt
Yêu cầu
– Web hosting (php, mysql, curl, outgoing port 465)
– SSL domain
– PHPMailer
– Botman
1. Ý tưởng kiểm tra và thông báo điểm
– Thông thường các bạn sẽ vào trang này https://daa.uit.edu.vn/sinhvien/kqhoctap đăng nhập rồi xem điểm của mình, để ý thêm sẽ thấy mục in bảng điểm theo đường dẫn này https://daa.uit.edu.vn/print/sinhvien/kqhoctap/ Ok như vậy mình sẽ lấy dữ liệu điểm ở đây.
– Như vậy nếu thông tin điểm số, các mục trong bảng điểm đó thay đổi thì mình mới quan tâm đến.
– Mình sẽ tiến hành lưu bảng điểm trước đó, và ở những lần sau mình kiểm tra xem 2 bảng điểm đó có khác nhau không, nếu khác thì mình lưu lại bảng điểm mới và thông báo cho người dùng.
2. Sử dụng CURL để đăng nhập và lấy dữ liệu
Phân tích form đăng nhập tại https://daa.uit.edu.vn/user
Mình lấy được các phần chính trong source form đăng nhập như sau:
<form action="https://daa.uit.edu.vn/user" method="post" id="user-login" accept-charset="UTF-8" _lpchecked="1"> <input type="text" id="edit-name" name="name" value="" size="60" maxlength="60" class="form-text required" style="background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII="); cursor: auto;" autocomplete="off"> <input type="password" id="edit-pass" name="pass" size="60" maxlength="128" class="form-text required" style="background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII="); cursor: auto;" autocomplete="off"> <input type="hidden" name="form_build_id" value="form-Om37v4ngwmGX1JoLeeqdaFt-tROVqrcfM-3GsC5v5iw"> <input type="hidden" name="form_id" value="user_login"> <input type="submit" id="edit-submit" name="op" value="Đăng nhập" class="form-submit"> </form>Như vậy mình sẽ post cho nó các data như sau
$postdata = “name=”.addslashes($username).”&pass=”.addslashes($password).’&form_build_id=form-Om37v4ngwmGX1JoLeeqdaFt-tROVqrcfM-3GsC5v5iw&form_id=user_login&op=Đăng%20nhập’;
Post data và lấy dữ liệu:
$username = ""; $password = ""; // username và pass của bạn $url="https://daa.uit.edu.vn/user/login/"; $postdata = "name=".addslashes($username)."&pass=".addslashes($password).'&form_build_id=form-Om37v4ngwmGX1JoLeeqdaFt-tROVqrcfM-3GsC5v5iw&form_id=user_login&op=Đăng%20nhập'; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); curl_setopt ($ch, CURLOPT_TIMEOUT, 60); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_COOKIEJAR, $file_cookie); curl_setopt ($ch, CURLOPT_REFERER, $url); curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt ($ch, CURLOPT_POST, 1); curl_exec($ch); curl_setopt ($ch, CURLOPT_URL, "https://daa.uit.edu.vn/print/sinhvien/kqhoctap"); curl_setopt($ch, CURLOPT_POST, false); $result = curl_exec($ch);Sau khi đăng nhập xong mình sẽ lấy dữ liệu kết quả học tập.
Lúc này biến $result là source html của trang https://daa.uit.edu.vn/print/sinhvien/kqhoctap
3. Kiểm tra sự thay đổi, cập nhật và thông báo người dùng
– Để đơn giản mình sẽ so sánh sự khác biệt của chúng bằng md5
– Tuy nhiên code trong biến $result có chứa link css và js, nhìn sơ mình đoán rằng nó được sinh từ cache, nên có thể nó sẽ thay đổi url trong một thời gian, nếu sử dụng md5 thì chắc chắn sẽ thông báo sai.
– Lúc này chúng ta nhận xét thêm, đoạn code show bảng điểm chủ yếu bắt đầu từ đoạn <div class=”print-content”> và kết thúc tại </strong></font></div> Nên mình sẽ dung hàm preg_match để lấy thành phần trong đó, và không quan tâm đến các link css, js ở trên.
preg_match('#<div class=\"print-content\">(.*?)<\/strong><\/font><\/div>#s', $result, $res); $data = $res[0].'</strong></font></div>';Sau khi mình lấy được dữ liệu lưu vào biến $data mình tiến hành so sánh md5 của dữ liệu vừa lấy được với md5 đã lưu trước đây.
$oldcode = .....// dữ liệu cũ lấy từ database $newcode = md5($data); if ($oldcode!=$newcode) { // Update lại md5 cho database // thông báo cho người dùng }Sau khi đưa vào sử dụng một thời gian, có những thời điểm hệ thống báo sai, qua phân tích mình phát hiện, khi server UIT down hoặc người dùng nhập cung cấp sai pass, thì dữ liệu get được của nó chẳng có gì, điều này khiến md5 của nó trong database cũng thay đổi theo, để khắc phục việc này mình đã thay if ($oldcode!=$newcode) bằng if ($oldcode!=$newcode && $newcode!=’3e598d76745e5a0951c17eec14019ea1′)
Oke, cách thức xử lí cơ bản là như vậy, việc còn lại là các bạn tổ chức database lưu trữ và sử dụng PHPMailer và Botman để thông báo người dùng.
4. Cách dùng botman để gửi Messenger
Các bạn sử dụng composer để lấy thư viện botman, hướng dẫn của tác giả ở đây Installation Botman
Trong phần Sending (Dùng để gửi thông báo, không phải phản hồi tin nhắn) có nói đến my-recipient-user-id Đây là ID của cuộc trò chuyện giữa page và user facebook. Lưu ý rằng, nó không phải là ID của facebook bạn cần nhắn.
Bạn có thể lấy ID đó bằng hàm này $bot->getUser()->getId() khi người dùng gửi tin nhắn đến bạn.
ví dụ:
$botman->hears('id', function (BotMan $bot) { $bot->reply('ID messenger cua ban la: '.$bot->getUser()->getId()); exit; });5. Sử dụng PHPMailer như thế nào?
Trong file hướng dẫn của tác giả, đã có hướng dẫn cách dùng, các bạn có thể tham khảo thêm tại đây
Cấu hình Username và Password SMTP Các bạn có thể xem bài viết này từ 2p55s để lấy password SMTP
LẤY THÔNG TIN SMTP CỦA GMAIL
Các bạn xem tiếp phần tiếp theo tại đây Viết mã nguồn tự động thông báo điểm UIT (Phần 2)
Từ khóa » Bảng điểm Uit
-
Điểm Chuẩn Của Trường ĐH Công Nghệ Thông Tin Qua Các Năm - UIT
-
Cổng Thông Tin đào Tạo | Trường Đại Học Công Nghệ Thông Tin - UIT
-
Đại Học Công Nghệ Thông Tin – Đại Học Quốc Gia TPHCM - 2021
-
Tuyển Sinh Trường ĐH Công Nghệ Thông Tin - ĐHQG TP. HCM - Posts
-
Điểm Chuẩn đánh Giá Năng Lực 2022 Đại Học Công Nghệ Thông Tin ...
-
Đại Học Quốc Gia TP.HCM (UIT): Ngôi Trường đại Học “đáng Mơ ước”
-
Trường Đại Học Công Nghệ Thông Tin, Đại Học Quốc Gia Thành Phố ...
-
Trường Đại Học Công Nghệ Thông Tin - ĐH Quốc Gia TP.HCM
-
Em Rớt Môn Học Tự Chọn Nhưng Em đã Tích Luỹ đủ Số Tín Chỉ Của ...
-
UitSQL/QuanLyGiaoVu.sql At Master - GitHub
-
Xem điểm Chuẩn Đại Học Công Nghệ Thông Tin TPHCM 2022 Chính ...
-
UIT-HCM Report Template - Overleaf, Online LaTeX Editor
-
Trường Đại Học Công Nghệ Thông Tin Công Bố điểm Chuẩn đánh Giá ...