我在我的lib中设置了一个nokogiri脚本作为模块。我的产品表单中还有一个字段,它获取一个URL并将其传递给nokogiri脚本。如何使用nokogiri模块解析的数据填写表单字段。基本上我希望表单填充解析数据,以便用户只需查看并向db添加产品。
我的模块:
module product
def get_product
url = ""
product_page = Nokogiri::HTML(open(url))
image_url = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div/div/div/div').children[3].attributes['href'].text
title_text = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div[2]/div[2]/div/form/div/h1').text
description = product_page.at_xpath('//*[(@id = "SITCC_1column")]//*[contains(concat( " ", @class, " " ), concat( " ", "ItemSectionContent", " " ))]').text.strip!
curr_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "camelPrice", " " ))]').text[/[0-9\.]+/]
base_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "SubmapPrice", " " ))]').text[/[0-9\.]+/]
wm_item_num = url.split("/").last
id_str = "walmart_#{wm_item_num}"
end
end
答案 0 :(得分:0)
====================================Module================================
module product
def get_product(product)
product_page = Nokogiri::HTML(open(product.url))
product.image_url = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div/div/div/div').children[3].attributes['href'].text
product.title_text = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div[2]/div[2]/div/form/div/h1').text
product.description = product_page.at_xpath('//*[(@id = "SITCC_1column")]//*[contains(concat( " ", @class, " " ), concat( " ", "ItemSectionContent", " " ))]').text.strip!
product.curr_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "camelPrice", " " ))]').text[/[0-9\.]+/]
product.base_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "SubmapPrice", " " ))]').text[/[0-9\.]+/]
product.wm_item_num = url.split("/").last
product.id_str = "walmart_#{wm_item_num}"
product # returning product after parsing the url and setting other fields.
end
end
====================================View================================
<%= form_tag url_for(:controller => 'products', :action => 'parse_url') do %>
<p>
<%= label_tag :enter_url %> :<br />
<%= text_field_tag :url %>
</p>
<p class="button"><%= submit_tag "Parse" %></p>
====================================Controller================================
class ProductsController < ApplicationController
include MyModule #if your file name is my_module.rb in /lib folder.
def parse_url
@product = Product.new
@product = get_product(@product)
render ('products/new')
end
def create
@product = Product.new(params[:products]) # the usual way
if @product.save
else
end
end
end
====================================View================================
<%= form_for @product, :url => {:controller => 'products', :action => 'create'} do |f| %>
<p>
<%= f.label :image_url %> : <%= f.text_field :image_url %>
</p>
<p>
<%= f.label :title_text %> : <%= f.text_field :title_text %>
</p>
<p>
<%= f.label :description %> : <%= f.text_field :description %>
</p>
.
.
.
.
<p class="button"><%= f.submit "Create this product" %></p>
====================================The End================================
Thanks.