class MMonitor::Strategies::Jd

search.jd.com/search?keyword=%B0%CD%C0%E8%C5%B7%C0%B3%D1%C5&qr=&qrst=UNEXPAND&et=&rt=1&stop=1&ev=exbrand_%C5%B7%C0%B3%D1%C5%A3%A8LOREAL%A3%A9%40&area=1&wtype=1

Public Instance Methods

css_path() click to toggle source
# File lib/mmonitor/strategies/jd.rb, line 11
def css_path
  {
    body:      'body>div.w.main>div.right-extra',
    list:      'div#plist>ul.list-h',
    item:      'li',
    total:     'div#filter>div.fore1>div.total>span>strong',
    pages:     'div#filter>div.fore1>div#top_pagi>span',
    spu_id:    'sku',
    title:     'div>div.p-name>a',
    photo_url: 'div>div.p-img >a>img'
  }
end
extra() click to toggle source
# File lib/mmonitor/strategies/jd.rb, line 37
def extra
  get_prices(self.items.keys)
end
pages() click to toggle source
# File lib/mmonitor/strategies/jd.rb, line 33
def pages
  self.body.at(css_path[:pages]).text.split('/')[1].to_i
end
photo_url() click to toggle source
# File lib/mmonitor/strategies/jd.rb, line 29
def photo_url # 产品图片
  self.item.at(css_path[:photo_url])['data-lazyload']
end
provider() click to toggle source

输出的产品

# File lib/mmonitor/strategies/jd.rb, line 7
def provider
  :jd
end
spu_id() click to toggle source
# File lib/mmonitor/strategies/jd.rb, line 24
def spu_id # 产品ID
  id = squish( self.item[css_path[:spu_id]] )
  id == 'scroll_loading' ? nil : id
end

Private Instance Methods

get_prices(sku_ids) click to toggle source

获取价格

# File lib/mmonitor/strategies/jd.rb, line 56
def get_prices(sku_ids)
  url = "http://p.3.cn/prices/mgets"
  sku_ids = sku_ids.map { |sku_id| "J_#{sku_id}" }
  sku_ids.each_slice(100) do |skuids|
    params = {
      skuids: skuids.join(',')
    }
    prices = MMonitor::Spider.get_json(url, params)
    unless prices.empty?
      set_prices(prices)
    end
  end
end
set_prices(prices) click to toggle source

设置价格

# File lib/mmonitor/strategies/jd.rb, line 43
def set_prices(prices)
  prices.each do |item|
    id = item['id'].gsub('J_', '')
    if self.items.has_key?(id) && item['m'].to_i > 0
      self.items[id][:tag_price] = item['m'].to_f
      self.items[id][:price] = item['p'].to_f
    else
      puts item['id']
      puts '_'*88
    end
  end
end