Skip to content

Populating database with fipe data

Caio Fellipe edited this page Sep 11, 2015 · 2 revisions

Create the following rake task, on let's say, lib/tasks/fipe.rake:

namespace 'fipe' do
  desc "Imports all the fipe data for all the available tables."
  task(import: :environment) do
    vehicles = FipeApi::Vehicle.all

    vehicles.each do |fvehicle|
      puts " Importing Vehicle #{fvehicle.id} - #{fvehicle.name}\n"
      vehicle = Vehicle.find_by_code(fvehicle.id)
      if !vehicle
        vehicle = Vehicle.create(code: fvehicle.id, name: fvehicle.name)
      end
      
      fvehicle.get_tables.each do |ftable|
        puts "Importing Table #{ftable.id} - #{ftable.month}/#{ftable.year}\n"
        table = Table.find_by_code(ftable.id)
        if table
          next
        end

        table = Table.create(code: ftable.id, month: ftable.month, year: ftable.year)

        fvehicle.get_brands(ftable).each do |fbrand|
          puts "  Importing Brand #{fbrand.id} - #{fbrand.name}\n"
          brand = Brand.find_by_code(fbrand.id)
          if !brand
            brand = Brand.create(code: fbrand.id, name: fbrand.name, vehicle_id: vehicle.id, table_id: table.id)
          end

          fbrand.get_models(ftable).each do |fmodel|
            puts "   Importing Model #{fmodel.id} - #{fmodel.name}\n"
            model = Model.find_by_code(fmodel.id)
            if !model
              model = Model.create(code: fmodel.id, name: fmodel.name, brand_id: brand.id)
            end

            fmodel.get_years(ftable).each do |fyear|
              puts "    Importing Year #{fyear.id} - #{fyear.name}\n"
              year = Year.create(code: fyear.id, name: fyear.name, fuel: fyear.fuel, model_id: model.id)
              
              result = fyear.get_result(ftable)
              puts "    Importing Price #{result.id} - #{result.price}\n"  
              VehiclePrice.create(fipe_code: result.id, authentication: result.authentication, fuel: result.fuel, price: result.price.gsub("R$","").gsub(".","").gsub(",",".").to_f, year_id: year.id, query_time: result.query_time)
            end
          end
        end
      end
    end
  end
end

Clone this wiki locally