• Thứ Năm, 18/12/2008 10:18 (GMT+7)

    Lập trình tự động refesh trang web

    Câu hỏi :

    Trang web SJC có báo giá mua và bán vàng, tôi muốn viết chương trình lấy giá theo thời gian làm tươi là 01 phút mà không cần vào trang web này. Xin hướng dẫn.


     



    Trả lời :
     Để viết chương trình tải trang web từ 1 web server nào đó về máy cá nhân rồi rút trích một số thông tin (bảng giá vàng) trong trang web đó, bạn cần trang bị một số kiến thức sau đây: kiến thức lập trình mạng dùng socket, kiến thức về giao thức truy xuất web HTTP, kiến thức về ngôn ngữ HTML miêu tả trang web, kiến thức về xử lý chuỗi văn bản... Viết chương trình đúng yêu cầu của bạn hơi dài và quá cụ thể nên chúng tôi chọn 1 ứng dụng đơn giản hơn: ứng dụng cho phép người dùng nhập địa chỉ trang web rồi tải về trang web đó và hiển thị vào đối tượng RichTextBox cho người dùng xem bằng VB 6.0. Qui trình điển hình để viết ứng dụng này gồm các bước sau:

     1. Chạy VB 6.0, tạo Project “Standard EXE”.

     2. Chọn menu Project.Components để hiển thị cửa sổ Components, duyệt tìm và chọn mục "Microsoft Rich Textbox Control 6.0" và "Microsoft Winsock Control 6.0" rồi chọn button OK để thêm 2 ActiveX này vào cửa sổ Toolbox của Project.

     3. Thiết kế Form có dạng sau:
     Đặt tên cho Textbox là txtURL, tên button là btnStart, tên RichTextBox là rtbContent, tên cho Winsock là Winsock1. Lưu ý là vị trí và kích thước của đối tượng Winsock không quan trọng vì khi chạy nó sẽ bị ẩn trong Form.

     4. Nhấn đúp chuột vào button Start để tạo thủ tục xử lý sự kiện click chuột trên nó rồi viết code như sau:
     'thủ tục click chuột trên button Start
     Private Sub txtStart_Click()
     Dim istart As Integer
     Dim iend As Integer
     Dim strURL As String
     'xác định địa chỉ Webserver từ URL của trang Web
     'giả sử URL luôn có dạng http://www.serveraddress/pathname
     istart = 12 'vị trí bắt đầu chuỗi địa chỉ Server
     'xác định vị trí dấu / kết thúc địa chỉ server
     iend = InStr(istart, txtURL.Text, "/", vbBinaryCompare)
     strURL = Mid(txtURL.Text, istart, iend - istart)
     'nối kết tới Web server
     Winsock1.Close
     Winsock1.Protocol = sckTCPProtocol
     Winsock1.RemoteHost = strURL
     Winsock1.RemotePort = 80
     Winsock1.Connect
     End Sub
     
     'thủ tục xử lý nối kết thành công
     Private Sub Winsock1_Connect()
     'xóa nội dung Rich Textbox
     rtbContent.Text = ""
     'gởi request download trang Web
     Winsock1.SendData "GET " & txtURL.Text & vbCrLf & vbCrLf
     End Sub
     
     'thủ tục xử lý việc nhận kết quả
     Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
     Dim recData As String
     On Error GoTo Ketthuc
     'nhận nội dung gốc trang Web
     Winsock1.GetData recData, vbString, bytesTotal
     'hiển thị vào Rich TextBox
     rtbContent.Text = rtbContent.Text & recData
     Exit Sub
     Ketthuc:
     Winsock1.Close
     End Sub

     5. Chọn menu Run.Start để chạy thử ứng dụng, nhập thử địa chỉ trang Web (http://www.sjc.com.vn/default.asp) và xem nội dung gốc của trang web trong RichTextBox.
     Lưu ý để tải về định kỳ trang web, bạn có thể dùng đối tượng Timer và thiết lập thời gian định kỳ cho Timer hoạt động, mỗi lần đếm xong 1 định kỳ, Timer sẽ kích hoạt thủ tục xử lý sự kiện Timer chạy, bạn sẽ gọi thủ tục btnStart_Click chạy.

     Việc rút trích bảng giá vàng sẽ được thực hiện thông qua việc xử lý chuỗi. Trong trang web của SJC, bảng giá vàng ở từng địa phương (Hà Nội, TP.HCM...) được miêu tả trong từng tag lệnh <table> gần cuối trang web.
    Chuyên mục: Lập trình