Domanda

Voglio controllare il prezzo di un determinato prodotto su un certo webshop.

Sto usando una costante per memorizzare un hash di dati di webshop in modo che la modifica sia più facile (verrà aggiunto altri negozi).

Ecco il codice che sto usando:

require 'httparty'
require 'nokogiri'

class Prijscheckr

  STORES = {
    :zara => {
      'base_uri' => 'http://www.zara.com/nl/',
      'normal_price_css' => 'p.price > span',
      'css_normal_price_extract' => "[0].attr('data-price')",
      'normal_price_xpath' => '/p[3]/span',
      'xpath_normal_price_extract' => "[0].attr('data-price')"
    }
  }

  def begin(args = {})
    page = Nokogiri::HTML(HTTParty.get(args[:url]))

    price = page.css(STORES[:zara]['normal_price_css'])STORES[:zara]['css_normal_price_extract']
  end
end
.

quando fai

p = Prijscheckr.new

p.begin(url: 'http://www.zara.com/nl/nl/collectie-aw14/dames/jacks/leren-bikerjack-c269184p2137577.html')
.

Ecco i risultati:

    # Works
    # price = page.css('p.price > span')[0].attr('data-price')

    # Works
    # price = page.css(STORES[:zara]['normal_price_css'])[0].attr('data-price')

    # Does not work
    # price = page.css(STORES[:zara]['normal_price_css'])STORES[:zara]['css_normal_price_extract']
.

Come posso concatenare price = page.css(STORES[:zara]['normal_price_css'])STORES[:zara]['css_normal_price_extract'] senza codificando duro nel metodo?

È stato utile?

Soluzione

Il codice Ruby non può essere creato dalla concatenazione della stringa.Si potrebbe piacere dichiarare css_normal_price_extract come lamba

'css_normal_price_extract' => ->(val) {val[0].attr('data-price')}

price = STORES[:zara]['css_normal_price_extract'].call(page.css(STORES[:zara]['normal_price_css']))
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top