Trong các bài tutorial trước, chúng ta đã viết chương trình sử dụng Jsoup, Boilerpipe, Selenium và Apache Tika để tìm kiếm và trích xuất các thông tin cần thiết. Trong bài tutorial này, chúng ta sẽ viết chương trình để giải quyết bài toán: “Tìm tất cả các bài mới đăng trên một trang Web bất kỳ” bằng cách sử dụng kết hợp Jsoup và RSS (Really Simple Syndication). RSS cho phép người dùng có thể nhanh chóng truy cập các tin tức và bài đăng mới nhất từ một nguồn tin cho trước và hầu hết các trang Web trên mạng Internet đều cung cấp tính năng này.

Ở đây, chúng ta sẽ sử dụng thư viện ROME để tiến hành download và xử lý dữ liệu RSS, do đó ta thêm dependency của ROME vào file pom.xml như sau:

Thư viện ROME là một thư viện Java tương đối dễ sử dụng, không chỉ cho phép người dùng tạo ra các RSS feeds và đăng tải các RSS feeds mà còn cho phép ta đọc các RSS feeds từ một nguồn tin cho trước. Trong bài này chúng ta sẽ sử dụng ROME để tìm kiếm tất cả các bài mới đăng từ trang tin tức CNN với hàm getRSSFeed(String urlString) như sau:

Tiến hành chạy thử hàm getRSSFeed() ở trên với tham số đầu vào là đường dẫn RSS của CNN về chủ để Khoa học và Không gian ta được kết quả:

Ngoài đường dẫn RSS ở trên, CNN còn có nhiều đường dẫn RSS khác (các RSS url được tổng hợp tại địa chỉ: http://edition.cnn.com/services/rss/). Do đó để có thể cập nhật tất cả các bài mới đăng trên CNN, chúng ta sẽ sử dụng Jsoup để liệt kê tất cả các đường dẫn RSS này . Sau khi tìm được tất cả các đường dẫn RSS của CNN, chúng ta sẽ sử dụng hàm getRSSFeed() để tìm các bài mới đăng của từng đường dẫn RSS.

Việc liệt kê tất cả các RSS urls của CNN được thực hiện bởi hàm feedUrlFinder(String sourceUrl) như sau (các bạn tham khảo thêm cách sử dụng Jsoup tại bài tutorial Viết chương trình sử dụng JsoupTìm kiếm trên Google với Jsoup):

Sử dụng hàm feedUrlFinder() ở trên, ta tìm được tất cả 20 đường dẫn RSS của CNN như sau:

Sử dụng hàm getRSSFeed() để tìm các bài đăng mới của từng đường dẫn RSS ở trên ta được kết quả:

Lưu ý:

– Phần lớn các trang web chỉ liệt kê một số lượng nhất định các bài mới post (thông thường từ 10-25 bài) trong RSS feed và ta không thể tìm được các bài post vượt quá số lượng này hoăc lấy được thông tin về các bài post cũ hơn. Một số chương trình như Feedly hoặc GoogleReader API có thể cho ta các kết quả trên là do các chương trình này đã lưu trữ dữ liệu từ trước (lấy và lưu trữ dữ liệu RSS feeds của từng ngày)

– RSS không tự động đẩy dữ liệu mới được cập nhập về phía người dùng, do đó ta phải thường xuyên truy cập địa chỉ Feed URL để kiểm tra xem có dữ liệu mới hay không (thiết lập chương trình kiểm tra 2-3 lần/giờ).

Như vậy, ta đã hoàn thành việc viết chương trình sử dụng Jsoup và RSS để tìm tất cả các bài mới đăng trên trang CNN. Các bạn có thể tham khảo full code của chương trình dưới đây.

Tháng Một 7, 2019
ITechSeeker