0

libのモジュールとしてnokogiriスクリプトを設定しています。また、製品フォームにURLを取得し、それをnokogiriスクリプトに渡すフィールドがあります。nokogiriモジュールが解析するデータをフォームフィールドに入力するにはどうすればよいですか。基本的に、ユーザーが製品を確認してデータベースに追加するだけで済むように、フォームに解析されたデータを入力する必要があります。

私のモジュール:

    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
4

1 に答える 1

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.
于 2012-05-14T22:22:39.780 に答える