Last active
December 22, 2015 14:03
-
-
Save abernardobr/b8af09ed7b66b12f315e to your computer and use it in GitHub Desktop.
Importar tabela FIPE mongodb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Args = require('commander'); | |
Args | |
.version('0.0.1') | |
.option('-s, --servertype [type]', 'Type of the server location: dev, test, accept or prod') | |
.option('-r, --routes [routes]', 'A comma separeated routes: admin,server') | |
.option('-e, --environment [environment]', 'If we are running on windows, mac or linux. Default is mac.') | |
.parse(process.argv); | |
process.env["servertype"] = Args.servertype ? Args.servertype : "dev"; | |
process.env["environment"] = Args.environment ? Args.environment : "mac"; | |
// load modules | |
var _ = require('lodash'); | |
var HD = require('hd').utils; | |
var Domains = require('hd').domains; | |
var config = require('../config/config'); | |
var Mongoose = require('mongoose'); | |
var Request = require('request'); | |
var Async = require('async'); | |
var serverConfig = config.server; | |
var tipos = { | |
'carros': 1, | |
'motos': 2 | |
}; | |
var DELETE_BEFORE = false; | |
var internals = { | |
url: 'https://fipe-parallelum.rhcloud.com/api/v1/', | |
orderMarca: { | |
"23": 0, | |
"21": 1, | |
"22": 2, | |
"25": 3, | |
"26": 4, | |
"41": 5, | |
"44": 6, | |
"48": 7, | |
"56": 8, | |
"59": 9 | |
}, | |
reqTries: 5 | |
}; | |
// bootstratp mongoose | |
internals.initDB = function() { | |
try { | |
Mongoose.connect(config.db.host); | |
} catch(ex) { | |
} | |
} | |
internals.doRequest = function(url, tryNum, cb) { | |
var json = {}; | |
Request.get(url, {timeout: 45000, json: true}, function (req, resp) { | |
if (!_.isUndefined(resp) && resp.statusCode === 200) { | |
var json = resp.body; | |
cb(json); | |
} else { | |
if(tryNum === internals.reqTries) { | |
console.log('ERROR: ' + url); | |
cb({}); | |
} else { | |
tryNum += 1; | |
internals.doRequest(url, tryNum, cb); | |
} | |
} | |
}); | |
} | |
internals.request = function(url, cb) { | |
internals.doRequest(url, 1, cb); | |
} | |
internals.addVeiculo = function(tipoMarca, marca, modelo, ano, veiculo, cb) { | |
var obj = { | |
tipo: tipos[tipoMarca], | |
codigoMarca: marca.codigo, | |
codigoModelo: modelo.codigo, | |
codigoAno: ano.codigo, | |
SiglaCombustivel: veiculo.SiglaCombustivel.trim(), | |
MesReferencia: veiculo.MesReferencia.trim(), | |
CodigoFipe: veiculo.CodigoFipe.trim(), | |
Combustivel: veiculo.Combustivel.trim(), | |
AnoModelo: veiculo.AnoModelo, | |
Modelo: veiculo.Modelo.trim(), | |
Marca: veiculo.Marca.trim(), | |
Valor: veiculo.Valor.trim() | |
}; | |
Domains.fipe_veiculos().dcrud.update({ CodigoFipe: veiculo.CodigoFipe }, obj, { upsert: true }, function(err, retVeiculo) { | |
if(err) console.dir(err); | |
cb(); | |
}); | |
} | |
internals.getVeiculos = function(tipoMarca, marca, modelo, anos, cb) { | |
var funcs = []; | |
_.each(anos, function(ano) { | |
funcs.push(function(next) { | |
ano.tipo = tipos[tipoMarca]; | |
ano.codigoMarca = marca.codigo; | |
ano.codigoModelo = modelo.codigo; | |
Domains.fipe_anos().dcrud.update({ tipo: tipos[tipoMarca], codigoMarca: marca.codigo, codigoModelo: modelo.codigo, codigo: ano.codigo }, ano, { upsert: true }, function(err, retAno) { | |
if(err) console.dir(err); | |
var url = internals.url + tipoMarca + '/marcas/' + marca.codigo + '/modelos/' + modelo.codigo + "/anos/" + ano.codigo; | |
internals.request(url, function(veiculo) { | |
if(!_.isEmpty(veiculo)) { | |
internals.addVeiculo(tipoMarca, marca, modelo, ano, veiculo, function () { | |
console.log(url); | |
next(); | |
}); | |
} else { | |
next(); | |
} | |
}); | |
}); | |
}); | |
}); | |
Async.series(funcs, function() { | |
cb(); | |
}); | |
} | |
internals.getAnos = function(tipoMarca, marca, modelos, cb) { | |
var funcs = []; | |
_.each(modelos, function(modelo) { | |
funcs.push(function(next) { | |
modelo.tipo = tipos[tipoMarca]; | |
modelo.codigoMarca = marca.codigo; | |
Domains.fipe_modelos().dcrud.update({ tipo: tipos[tipoMarca], codigoMarca: marca.codigo, codigo: modelo.codigo }, modelo, { upsert: true }, function(err, retModelo) { | |
var url = internals.url + tipoMarca + '/marcas/' + marca.codigo + '/modelos/' + modelo.codigo + "/anos"; | |
internals.request(url, function(anos) { | |
internals.getVeiculos(tipoMarca, marca, modelo, anos, function () { | |
next(); | |
}); | |
}); | |
}); | |
}); | |
}); | |
Async.series(funcs, function() { | |
cb(); | |
}); | |
} | |
internals.getModelos = function(tipoMarca, marcas, cb) { | |
var funcs = []; | |
_.each(marcas, function(marca) { | |
funcs.push(function(next) { | |
var obj = {}; | |
var oderMarca = internals.orderMarca[marca.codigo.toString()]; | |
if(oderMarca) { | |
obj = { | |
codigo: marca.codigo, | |
nome: marca.nome, | |
order1: 0, | |
order2: oderMarca | |
}; | |
} else { | |
obj = { | |
codigo: marca.codigo, | |
nome: marca.nome, | |
order1: 1, | |
$inc: { order2: 1 } | |
}; | |
} | |
obj.tipo = tipos[tipoMarca]; | |
Domains.fipe_marcas().dcrud.update({ tipo: tipos[tipoMarca], codigo: marca.codigo }, obj, { upsert: true }, function(err, retMarca) { | |
internals.request(internals.url + tipoMarca + '/marcas/' + marca.codigo + '/modelos', function(json) { | |
internals.getAnos(tipoMarca, marca, json.modelos, function() { | |
next(); | |
}); | |
}); | |
}); | |
}); | |
}); | |
Async.series(funcs, function() { | |
cb(); | |
}); | |
} | |
internals.getMarcas = function(tipoMarca, cb) { | |
var funcs = []; | |
// get marcas | |
funcs.push(function(next) { | |
internals.request(internals.url + tipoMarca + '/marcas', function(marcas) { | |
internals.getModelos(tipoMarca, marcas, function() { | |
next(); | |
}); | |
}); | |
}); | |
Async.series(funcs, function() { | |
cb(); | |
}); | |
} | |
internals.init = function() { | |
var funcs = []; | |
funcs.push(function(next) { | |
internals.initDB(); | |
next(); | |
}); | |
if(DELETE_BEFORE) { | |
funcs.push(function (next) { | |
Domains.fipe_anos().dcrud.remove({}, function () { | |
next(); | |
}); | |
}); | |
funcs.push(function (next) { | |
Domains.fipe_marcas().dcrud.remove({}, function () { | |
next(); | |
}); | |
}); | |
funcs.push(function (next) { | |
Domains.fipe_modelos().dcrud.remove({}, function () { | |
next(); | |
}); | |
}); | |
funcs.push(function (next) { | |
Domains.fipe_veiculos().dcrud.remove({}, function () { | |
next(); | |
}); | |
}); | |
} | |
// get autos | |
//funcs.push(function(next) { | |
// internals.getMarcas('carros', function() { | |
// next(); | |
// }); | |
//}); | |
// get autos | |
funcs.push(function(next) { | |
internals.getMarcas('motos', function() { | |
next(); | |
}); | |
}); | |
Async.series(funcs, function() { | |
console.log('ADDED'); | |
}); | |
} | |
internals.init(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment