Perché ricevo un errore di sintassi, inaspettato TConstant, aspettando la parola chiave_end?
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?
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