如何从URL中提取查询字符串并将其保存在数据库中?

时间:2013-10-24 17:58:55

标签: ruby-on-rails ruby nokogiri

在现有页面(90年代早期手动开发)中,我有超过1500个类似下面的文本列表:

- Abenakis, Pancake Mix (Buckwheat), 1 kg, $4.32 Add to Cart 

及其“添加到购物车”HTML:

<a href="http://ww6.paymentcompany.com/cf/add.cfm?userid=87378855
&amp;product=Abenakis,+Pancake+Mix+(Buckwheat),+1+kg
&amp;price=4.32
&amp;scode=ABCD012
&amp;return=www.mysite.com/food.html">Add to Cart</a>

以下查询字符串随每个“添加到购物车”<a>锚点而变化:

&amp;product=Abenakis,+Pancake+Mix+(Buckwheat),+1+kg
&amp;price=4.32
&amp;scode=ABCD012

我想提取URL中的所有元素并将它们保存在DB表中,然后我可以以非列表方式显示它们。

我想过使用Nokogiri,但根据我的尝试,我没有得到它。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:5)

首先,您可以使用URI.parse解析您的网址,以区分查询字词。然后,您可以从URI::decode_www_form创建哈希并使用您喜欢的查询字词:

uri = URI.parse("http://ww6.paymentcompany.com/cf/add.cfm?userid=87378855&product=Abenakis,+Pancake+Mix+(Buckwheat),+1+kg&price=4.32&scode=ABCD012&return=www.mysite.com/food.html")
Hash[URI::decode_www_form(uri.query)]
# => {"userid"=>"87378855", "product"=>"Abenakis, Pancake Mix (Buckwheat), 1 kg", "price"=>"4.32", "scode"=>"ABCD012", "return"=>"www.mysite.com/food.html"}