Rails如何解析用户输入的URL中的链接标记

时间:2012-09-17 23:54:43

标签: html ruby-on-rails ruby ruby-on-rails-3

我希望能够查看用户输入网址的页面是否包含类似的内容:

<link rel="alternate" type="application/rss+xml" ... href="http://feeds.example.com/MyBlog"/>

这样我就可以省去一个解析原子或rss feed url的选项。

有什么好办法吗?我是否必须让我的服务器解析用户网址的整个HTML并将其全部删除?

我需要解析后使用变量中的url

2 个答案:

答案 0 :(得分:2)

您可以使用Nokogiri宝石 - http://www.nokogiri.org/

以下是使用css样式文档搜索语法的示例:

require 'nokogiri'
require 'open-uri'

document = Nokogiri::HTML(open('http://www.example.com/'))
rss_xml_nodes = doc.css('link[rel="alternate"][type="application/rss+xml"]')
rss_xml_hrefs = rss_xml_nodes.collect { |node| node[:href] }

rss_xml_nodes将包含一个Nokogiri XML元素数组

rss_xml_hrefs将包含一个包含节点'href属性

的字符串数组
rss_xml_nodes.empty?
=> false

rss_xml_hrefs
=> ["http://www.example.com/rss-feed.xml", "http://www.example.com/rss-feed2.xml"] 

答案 1 :(得分:0)

我相信你确实必须解析所有这些内容,因为除了通过一个http请求获取所有内容之外,没有办法获得任何内容。为此,您可以使用Ruby的Net:HTTP类,如下所示:

require 'net/http'

url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
  http.request(req)
}

# regex below grabs all the hrefs on link tags
# print all the matches
res.body.scan(/<link[^>]*href\s*=\s*["']([^"']*)/).each {|match| 
  puts match
}