读取RSS数据其实很简单,通过调用HTTP的get方法访问数据源,将结果交给REXML解析。与Rails里访问某些webservice有相似之处。
【清单一】
def air_deals
source = ‘http://b2b.expedia.com/daily/outposts/rss/getRSSDeals.asp?mdbcat=20&dealName=Best%20Flight%20Deals’
#调用get方法
@rss_str = Net::HTTP.get(URI.parse(source))
#处理字符串,去除空白符
@rss_str = @rss_str.gsub(/\n?\r?\t?/,'')
#新建一个XML文档
xml_doc = REXML::Document.new @rss_str
#处理结果以数组方式保存,数组里的每一条记录就是一个消息。消息封装在AirfareRssReader中,见【清单二】
airfare_readers = Array.new
xml_doc.elements["rss/channel"].each_element("//item") do |ele|
reader = AirfareRssReader.new
reader.title = ele.elements["title"].get_text
reader.pub_date = ele.elements["pubDate"].get_text
reader.description = ele.elements["description"].get_text
reader.link = ele.elements["link"].get_text
airfare_readers << reader
end
#渲染页面
render 。。。。。
end
【清单二】
class AirfareRssReader
attr_accessor :title, :pub_date, :description, :link
end
#TODO:明天继续webservice的访问
【清单一】
def air_deals
source = ‘http://b2b.expedia.com/daily/outposts/rss/getRSSDeals.asp?mdbcat=20&dealName=Best%20Flight%20Deals’
#调用get方法
@rss_str = Net::HTTP.get(URI.parse(source))
#处理字符串,去除空白符
@rss_str = @rss_str.gsub(/\n?\r?\t?/,'')
#新建一个XML文档
xml_doc = REXML::Document.new @rss_str
#处理结果以数组方式保存,数组里的每一条记录就是一个消息。消息封装在AirfareRssReader中,见【清单二】
airfare_readers = Array.new
xml_doc.elements["rss/channel"].each_element("//item") do |ele|
reader = AirfareRssReader.new
reader.title = ele.elements["title"].get_text
reader.pub_date = ele.elements["pubDate"].get_text
reader.description = ele.elements["description"].get_text
reader.link = ele.elements["link"].get_text
airfare_readers << reader
end
#渲染页面
render 。。。。。
end
【清单二】
class AirfareRssReader
attr_accessor :title, :pub_date, :description, :link
end
#TODO:明天继续webservice的访问