Lấy tin tức tự động từ Vnexpress.net và đổ vào Database
Demo: http://demo.khanh.com.vn/vnexpress (Fixed 24/2/2011)
Ý tưởng chính của tool này là bóc tách dữ liệu từ mã html của trang báo điện tử vnexpress.net. Sử dụng Regular Expression, xử lý chuỗi có được để lọc ra tiêu đề, tóm tắt, nội dung. Sau đó lưu những nội dung này vào cơ sở dữ liệu của chúng ta.
Chúng ta có thể dùng tool này để đăng tin nhanh lên website của mình mà không cần phải thao tác nhiều! Góp phần làm nội dung website phong phú thêm, đặc biệt là các website về tin tức.
Chúng ta có thể dùng tool này để đăng tin nhanh lên website của mình mà không cần phải thao tác nhiều! Góp phần làm nội dung website phong phú thêm, đặc biệt là các website về tin tức.
Chuẩn bị:
- IIS 6.x hay 7.x đều được chứa thư mục web là VNExpress
- Tạo một database mới, ở đây mình dùng MS SQL Server.
- Sử dụng Visual Studio để viết code, thiết kế giao diện và tạo chuỗi kết nối đến database.
- Copy đầy đủ các tệp tin khác như hình ảnh, java, Editor Script,...
Bước 1: Thiết kế cơ sỡ dữ liệu
- Khởi động MS SQL Server và tạo database mới với tên VNEXPRESS
- Chọn database vừa tạo và Run đoạn Query sau:
Đoạn trên là cấu trúc table chứa tin tức cần lưu, bạn có thể thay đổi cấu trúc này cho phù hợp với một website có sẵn.
Bước 2: Giao diện chung
- Dùng Visual Studio tạo một website trống mới, add một webform với tên Default.aspx
Chuyển qua chế độ Design View và sử dụng HTML Toolbox để chèn vào 1 table 2 dòng 5 cột.
- Dùng Visual Studio tạo một website trống mới, add một webform với tên Default.aspx
Chuyển qua chế độ Design View và sử dụng HTML Toolbox để chèn vào 1 table 2 dòng 5 cột.
Table này chứa các thành phần như: Dropdownlist, Button, hình ảnh và các label Title, Description, Content,...
Bước 3: Viết code
- Chuyển qua chế độ Source của file Default.aspx, thêm đoạn sau ở phần HEADER
- Chuyển qua chế độ Source của file Default.aspx, thêm đoạn sau ở phần HEADER
- <link href="scripts/style.css" rel="stylesheet" type="text/css" />
- <script type="text/javascript" src="scripts/jquery-1.4.4.min.js"></script>
- <script language="javascript" type="text/javascript" src="scripts/CLEditor1_2/jquery.cleditor.min.js"></script>
- <link href="scripts/CLEditor1_2/jquery.cleditor.css" rel="stylesheet" type="text/css" />
- <script type="text/javascript">
- $(document).ready(function () {
- $("#txtContent").cleditor({
- width: 600,
- height: 400,
- });
- });
- </script>
Ở đây mình chỉ nêu ra một số đoạn chính, phần còn lại các bạn có thể download mã nguồn về để tham khảo
Sự kiện Page_Load. Khi người dùng bắt đầu load trang, thì một Dropdownlist sẽ được tạo ra, chứa các Chuyên mục tin tức cần được lấy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { if (!IsPostBack) { string [,] Categories = { { "----Chọn Chuyên Mục----" , "" }, for ( int i = 0; i < Categories.GetLength(0); i++) { ddlCategory.Items.Add( new ListItem(Categories[i, 0], Categories[i, 1])); } } } |
- Sự kiện khi người dùng chọn 1 chuyên mục bất kì:
1 2 3 4 5 6 7 8 9 10 11 12 13 | // Su kien cho List Category protected void ddlCategory_OnSelectedIndexChanged(Object Source, EventArgs e) { if (ddlCategory.SelectedIndex != -1 && ddlCategory.SelectedItem.Value != "" ) { string [,] ListTopic = GetTitleAndLinkofTopic(GetWebContent(ddlCategory.SelectedItem.Value)); ddlTopic.Items.Clear(); for ( int i = 0; i < ListTopic.GetLength(0); i++) { ddlTopic.Items.Add( new ListItem(ListTopic[i, 0], ListTopic[i, 1])); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 | // Su kien chon List Topic protected void ddlTopic_OnSelectedIndexChanged(Object Source, EventArgs e) { if (ddlTopic.SelectedIndex != -1 && ddlTopic.SelectedItem.Value != "" ) { string Content = GetWebContent(ddlTopic.SelectedItem.Value); txtTitle.Text = GetTitle(Content); txtDescription.Text = GetDescription(Content); InsertSpecialChar( ref Content); txtContent.Text = GetContent(Content); } } |
- Hàm tải nội dung HTLM của một địa chỉ cho trước
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public string GetWebContent( string strLink) { string strContent = "" ; try { WebRequest objWebRequest = WebRequest.Create(strLink); objWebRequest.Credentials = CredentialCache.DefaultCredentials; WebResponse objWebResponse = objWebRequest.GetResponse(); Stream receiveStream = objWebResponse.GetResponseStream(); StreamReader readStream = new StreamReader(receiveStream, System.Text.Encoding.UTF8); strContent = readStream.ReadToEnd(); objWebResponse.Close(); readStream.Close(); } catch (Exception ex) { return ex.Message; } return strContent; } |
- Tiếp theo là các hàm Regex để bóc tách dữ liệu. Ở đây mình chỉ nêu ra phần lấy Tiêu Đề của tin tức, các hàm sau tương tự, các bạn có thể tham khảo ở file mã nguồn
1 2 3 4 5 6 7 8 9 10 | // Lay tieu de public string GetTitle( string Content) { string pattern = "[^<]+" ; Regex Title = new Regex(pattern); Match m = Title.Match(Content); if (m.Success) return m.Value.Substring(16,m.Value.Length-16); return "" ; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // Su kien Submit dua du lieu vao DB protected void btnSubmit_OnClick( object sender, EventArgs e) { if (txtTitle.Text != "" && txtDescription.Text != "" && txtContent.Text != "" ) { SqlDataSource1.InsertParameters[ "CHUYENMUC" ].DefaultValue = ddlCategory.SelectedItem.Text; SqlDataSource1.InsertParameters[ "TIEUDE" ].DefaultValue = txtTitle.Text; SqlDataSource1.InsertParameters[ "MOTA" ].DefaultValue = txtDescription.Text; SqlDataSource1.InsertParameters[ "NOIDUNG" ].DefaultValue = txtContent.Text; SqlDataSource1.InsertParameters[ "NGAYPOST" ].DefaultValue = DateTime.Now.ToString(); SqlDataSource1.Insert(); Response.Write( "<script type=" text/javascript "><!--mce:0--></script>" ); txtTitle.Text = "" ; txtDescription.Text = "" ; txtContent.Text = "" ; } else Response.Write( "<script type=" text/javascript "><!--mce:1--></script>" ); } |
Ah, trước khi có hàm xử lý sự kiện button click ở trên thì thiết lập chuỗi kết nối tới Database trước nhé. Ở chế độ Design của file Default.aspx thực hiện kéo và thả SqlDataSource trong Toolbox vào.
Chuỗi kết nối trong file Web.config sẽ có dạng
<connectionStrings>
<clear/>
<add name="VNExpress" connectionString="Data Source=localhost\sqlexpress;User ID=sa;Password=matkhau;persist security info=False;initial catalog=VNEXPRESS;" providerName="System.Data.SqlClient"/>
</connectionStrings>
Như vậy là các bước chính để hoàn thành tool lấy tin tức tự động từ Vnexpress.Net mình đã trình bày xong. Phần còn lại là mắm muối các bạn có hoàn toàn thể thêm vào/thay đổi cho phù hợp với website của bạn. Chúc bạn thực hiện thành công, có được một tool hữu ích!
Dưới đây là link down mã nguồn của trang DEMO trên
VNExpress(Fixed 24-2-2011).rar (57,51 kb) [Downloads: 907]
Tác giả: Duy Khánh (http://khanh.com.vn)
Qua Tết Vnexpress.net nó đổi cấu trúc website nên code trên không sử dụng được nữa.
Trong Code, bạn thay đổi lại link các chuyên mục của giống như ở Vnexpress hiện tại là được.
Ở các đoạn regex nếu không khớp thì bạn có thể dùng phần mềm RegexBuddy để test và sửa lại cho phù hợp với cấu trúc source các trang của vnexpress.net
Không có nhận xét nào:
Đăng nhận xét