Làm việc với RSS Feeds bằng Ruby
Xin chào các bạn, trong chúng ta dân lập trình web, ai đó chắc cũng từng mở đầu sự nghiệp của mình bằng một tutorial hay một trang blog, một trang báo mạng. Và ai cũng phải đau đầu nếu trang báo của mình không có nội dung, và phải viết nội dung cho nó như thế nào. Chắc mọi người đã từng nghe nói ...
Xin chào các bạn, trong chúng ta dân lập trình web, ai đó chắc cũng từng mở đầu sự nghiệp của mình bằng một tutorial hay một trang blog, một trang báo mạng. Và ai cũng phải đau đầu nếu trang báo của mình không có nội dung, và phải viết nội dung cho nó như thế nào. Chắc mọi người đã từng nghe nói đến RSS, và trên Viblo của chúng ta cũng đã có tính năng này. Bài viết hôm nay mình sẽ hướng dẫn cho các bạn cách lấy nội dung website khác từ RSS.
Ai cũng nghe qua từ RSS, vậy nó là gì? RSS là Really Simple Syndication là một dạng hợp tác đơn giản dựa trên việc cung cấp các "feeds" hay còn gọi là "nguồn cấp dữ liệu". Các "feeds" này được xây dựng theo cấu trúng đặc biệt XML cho phép người quan tâm đến nguồn dữ liệu có thể khai thác chúng một cách dễ dàng. Có rất nhiều chuẩn cho một cấu trúc RSS, các dạng hay sử dụng nhất là chuẩn rss 0.9.1 rss 1.0 rss 2.0 và Atom
Bắt đầu thọc mạch một chút nào. Trong Ruby có sẵn cho chúng ta module RSS, rất tiện lợi, đơn giản và dễ dàng : Để sửa dụng được module này thì chả có gì lại ngoài việc phải require nó vào trong Code của ta:
require 'rss' require 'open-uri'
Đơn giản quá =)). Tiếp theo, chúng ta sẽ xác định một đường dẫn cấp rss mà chúng ta lấy từ các trang báo, trang blog
url = 'http://www.ruby-lang.org/en/feeds/news.rss' open(url) do |rss| feed = RSS::Parser.parse(rss) puts "Title: #{feed.channel.title}" feed.items.each do |item| puts "Item: #{item.title}" end end
Đấy, chỉ cần truyền nó vào url, việc còn lại cứ để Ruby lo =)))). Chạy xong đoạn code trên chúng ta đã lấy ra được các item rồi, việc còn lại chỉ là cách chúng ta sử dụng nó, có thể đẩy thẳng ra view, hoặc save trước vào DB rồi đẩy ra sau cũng được. Chả sao cả.
Lấy của người ta về sài thì sướng thật rồi, nhưng cũng coi như chúng ta chạy free link backend cho website của họ. Vậy nếu chúng ta có một trang đủ mạnh mẽ và giàu kiến thức, chúng ta sẽ làm gì ? Giống Viblo, chúng ta đi cung cấp các "feeds" cho những ai quan tâm, và dĩ nhiên đổi lại chúng ta cũng có được một nguồn chạy link backend freeeeee. Tương tự giống với việc lấy RSS, để có thể chuyển đổi "feeds" của chúng ta theo định dạng XML, chúng ta cũng phải require "rss".
require "rss"
Và đẩy nội dung chúng ta ra thôi
rss = RSS::Maker.make("atom") do |maker| maker.channel.author = "matz" maker.channel.updated = Time.now.to_s maker.channel.about = "http://www.ruby-lang.org/en/feeds/news.rss" maker.channel.title = "Example Feed" maker.items.new_item do |item| item.link = "http://www.ruby-lang.org/en/news/2010/12/25/ruby-1-9-2-p136-is-released/" item.title = "Ruby 1.9.2-p136 is released" item.updated = Time.now.to_s end end
Cực kì đơn giản, đó là điều mà mình thích về Ruby on Rails. Đọc xong bài viết này, thử làm một trang báo lấy tin từ Vnexpress, Vietnamnet .. như Báo Mới thôi