从Ruby中的URL中隔离搜索项

时间:2012-07-18 21:18:54

标签: ruby-on-rails ruby parsing url

我有一系列丑陋,复杂的网址字符串,我想从http://google.com/search/things/q="example"中分离出人们输入的特定搜索字词,例如“示例”。

偶尔会有一个搜索区分+个字词,并且在用户指定的查询结尾处是&

即使经过大量谷歌搜索,我也不知道从哪里开始。任何帮助我开始的帮助都将不胜感激!

3 个答案:

答案 0 :(得分:5)

CGI.parse(URI.parse(url).query)

示例:

>> CGI.parse(URI.parse("http://google.com/?foo=bar&baz=hello").query)
=> {"foo"=>["bar"], "baz"=>["hello"]}

当然,请务必首先要求cgiuri

答案 1 :(得分:0)

你可能想要这样的东西:http://codefol.io/posts/9-How-Does-Rack-Parse-Query-Params-With-parse-nested-query

如果您使用的是基于Rack的框架(如Sinatra或Rails),那么您已经免费使用它了。

答案 2 :(得分:0)

Addressable::URI gem和Ruby自己的URI模块,既可以做你想要的,也可以很容易地自己动手。

Addressable :: URI功能非常强大,符合URI规范。以下是PRY内部使用的示例:

[9] (pry) main: 0> uri = Addressable::URI.parse('http://google.com/search/things?q="example"')
=> #<Addressable::URI:0x80ec33a0 URI:http://google.com/search/things?q="example">
[10] (pry) main: 0> uri.query
=> "q=\"example\""
[11] (pry) main: 0> uri.query_values
=> {"q"=>"\"example\""}

特别有用的是返回哈希的query_values方法。

你可以轻松地写出一些相同的东西:

Hash['http://google.com/search/things?q="example"'.split('?').last.split('&').map{ |q| q.split('=') }]
=> {"q"=>"\"example\""}

Addressable :: URI和URI的优点是它们提供了很多其他功能来操作URL,而不必这样做。