class Car
Attributes
base_url[RW]
details_url[RW]
make[RW]
model[RW]
model_year[RW]
overview[RW]
overview_url[RW]
photo_url[RW]
specs_url[RW]
trims[RW]
trims_url[RW]
Public Class Methods
new(model_year, make, car_model)
click to toggle source
# File lib/car.rb, line 5 def initialize(model_year, make, car_model) @make = make.capitalize @model = car_model @model_year = model_year @base_url = "http://autos.aol.com/cars-#{make}-#{car_model}-#{model_year}" @overview_url = "#{@base_url}/overview" @trims_url = "#{@base_url}/available-trims/" @specs_url = "#{@base_url}/specs" @mpg_url = "#{@specs_url}/mpg" @trims = Array.new Struct.new( "ExteriorStats", :length, :body_width, :body_height, :wheelbase, :ground_clearance, :curb, :gross_weight ) Struct.new( "InteriorStats", :front_head_room, :rear_head_room, :front_shoulder_room, :rear_shoulder_room, :front_hip_room, :rear_hip_room, :front_leg_room, :rear_leg_room, :luggage_capacity, :maximum_cargo_capacity, :standard_seating ) Struct.new( "PerformanceStats", :base_engine_size, :base_engine_type, :horsepower, :horsepower_rpm, :torque, :torque_rpm, :payload, :maximum_towing_capacity, :drive_type, :turning_radius ) Struct.new( "FuelEconomyStats", :fuel_tank_capacity, :epa_mileage_estimates ) get_overview get_specs get_features end
Public Instance Methods
find_trim_by_name(trim_name)
click to toggle source
# File lib/car.rb, line 215 def find_trim_by_name(trim_name) @trims.select { |trim| trim_name.include? trim.trim_name } end
get_features()
click to toggle source
# File lib/car.rb, line 201 def get_features car_page = Nokogiri::HTML(open(@trims_url)) available_tables = car_page.xpath("//table[@class = 'availableTable']") available_tables.each do |table| trim_text = table.xpath(".//div[@class = 'headrow']/a")[0].text trim = find_trim_by_name(trim_text) end end
get_overview()
click to toggle source
# File lib/car.rb, line 67 def get_overview car_page = Nokogiri::HTML(open(@overview_url)) if car_page.xpath("//title").text == "Site Map - AOL Autos" raise ModelDoesNotExist end @overview = car_page.xpath("//div[@class = 'rv_box']").text end
get_specs()
click to toggle source
# File lib/car.rb, line 77 def get_specs car_page = Nokogiri::HTML(open(@specs_url)) if car_page.xpath("//title").text == "Site Map - AOL Autos" raise ModelDoesNotExist end trim_list = car_page.xpath("//div[@class = 'sliding_columns_container']") category_name_table = car_page.xpath("//div[@class = 'ymm_data_table']/ul[@class = 'data_column']/li/span") i = 0 exterior_stats_names = [] interior_stats_names = [] performance_stats_names = [] mpg_stats_names = [] sub_category_name = "" category_name = category_name_table[i].text if category_name == "Exterior" i+=1 until sub_category_name == "Interior" if sub_category_name != "";exterior_stats_names << sub_category_name; end sub_category_name = category_name_table[i].text i+=1 end i+=1 sub_category_name = category_name_table[i].text until sub_category_name == "Performance" interior_stats_names << sub_category_name sub_category_name = category_name_table[i].text i+=1 end i+=1 sub_category_name = category_name_table[i].text until sub_category_name == "MPG" performance_stats_names << sub_category_name sub_category_name = category_name_table[i].text i+=1 end i+=1 sub_category_name = category_name_table[i].text while i < category_name_table.size sub_category_name = category_name_table[i].text mpg_stats_names << sub_category_name i+=1 end end interior_stats_names = unspacify(interior_stats_names) exterior_stats_names = unspacify(exterior_stats_names) performance_stats_names = unspacify(performance_stats_names) mpg_stats_names = unspacify(mpg_stats_names) total_stats = interior_stats_names.size + exterior_stats_names.size + performance_stats_names.size + mpg_stats_names.size exterior = trim_list[0].xpath("./ul[@class = 'data_column']") num_trims = exterior.size # create array to hold all of the cars trim variations @trims = Array.new exterior.each do |ext| trim = Trim.new trim.trim_name = ext.xpath("./li[@class='header']/span/a").text @trims << trim end #visually track progress of fetching pbar = ProgressBar.new("Getting specs", total_stats * @trims.size ) #exterior statistics for table exterior.each_with_index do |exterior_stats, index| stats = exterior_stats.xpath("./li/span") stat_index = 1 exterior_stats_names.each do |stat_name| unless stat_name == "" @trims[index].exterior[stat_name.to_sym] = stats[stat_index].text end stat_index += 1 pbar.inc end end #fetch interior statistics from table interior = trim_list[1].xpath("./ul[@class = 'data_column']") interior.each_with_index do |interior_stats, index| stats = interior_stats.xpath("./li/span") stat_index = 1 interior_stats_names.each do |stat_name| unless stat_name == "" @trims[index].interior[stat_name.to_sym] = stats[stat_index].text end stat_index += 1 pbar.inc end end #fetch performance data from table performance = trim_list[2].xpath("./ul[@class = 'data_column']") performance.each_with_index do |performance_stats, index| stats = performance_stats.xpath("./li/span") stat_index = 1 performance_stats_names.each do |stat_name| unless stat_name == "" @trims[index].performance[stat_name.to_sym] = stats[stat_index].text end stat_index += 1 pbar.inc end end #fetch fuel economy data from table fuel_economy = trim_list[3].xpath("./ul[@class = 'data_column']") fuel_economy.each_with_index do |fuel_economy_stats, index| stats = fuel_economy_stats.xpath("./li/span") @trims[index].fuel_economy.fuel_tank_capacity = stats[1].text @trims[index].fuel_economy.epa_mileage_estimates = stats[2].text pbar.inc end pbar.finish end
print_trims()
click to toggle source
# File lib/car.rb, line 211 def print_trims @trims.each { |trim| puts "#{trim.trim_name}\n" } end
Private Instance Methods
unspacify(string_array)
click to toggle source
# File lib/car.rb, line 221 def unspacify(string_array) ret = Array.new string_array.each do |string| if string != nil ret << string.downcase.gsub(" ", "_") end end ret end