Class: Classifieds::BoatScraper

Inherits:
Object
  • Object
show all
Defined in:
lib/classifieds/boat_scraper.rb

Overview

converts Boattrader.com power boat classified listings into objects

Class Method Summary collapse

Class Method Details

.scrape_results_detail_page(detail_doc, item_condition, detail_values) ⇒ Object

Returns detail attributes and values in detail_values hash



30
31
32
33
34
35
36
37
38
# File 'lib/classifieds/boat_scraper.rb', line 30

def self.scrape_results_detail_page(detail_doc, item_condition, detail_values)
  boat_details_doc = detail_doc.css('.boat-details')

  if boat_details_doc.empty?
    do_alt_processing(detail_doc, item_condition, detail_values)
  else
    do_normal_processing(detail_doc, boat_details_doc, item_condition, detail_values)
  end
end

.scrape_results_page(results_url, results_url_file, results_doc, item_class) ⇒ Object

Creates listings from summary web page



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/classifieds/boat_scraper.rb', line 7

def self.scrape_results_page(results_url, results_url_file, results_doc, item_class)
  results_doc.css('.boat-listings li').each { |result|
    id = listing_id(result)
    next if id.nil?

    descr_div = result.css('.description')
    title_parts = split_title(descr_div)  # => [year, make, model]
    start_date = ''  # Listing start_date currently not available from web page.
    sale_price = sale_price(descr_div)
    seller_name = seller_name(descr_div)
    seller_location = seller_location(descr_div)
    seller_phone = ''  # Seller phone currently not available from web page.

    detail_url = detail_url(results_url, result)
    item_condition = 'Used'  # Condition currently not available from web page.

    item = item_class.new(title_parts[0], title_parts[1], title_parts[2], sale_price, item_condition, detail_url)
    seller = Classifieds::Seller.find_or_create(seller_name, seller_location, seller_phone)
    Classifieds::Listing.new(id, item, seller, start_date)
  }
end