Skip to content

Instantly share code, notes, and snippets.

@StefanYohansson
Created November 28, 2016 14:13
Show Gist options
  • Select an option

  • Save StefanYohansson/35edd13898d1f5b1d8b2c172c871778e to your computer and use it in GitHub Desktop.

Select an option

Save StefanYohansson/35edd13898d1f5b1d8b2c172c871778e to your computer and use it in GitHub Desktop.
exportar tabela Fipe
var marcas = $('#selectMarcacarro option');
var modelos = [];
var modelos_ano = {};
var marcas_list = {};
marcas.each((i,e) => {
if (e.value != '')
marcas_list[e.value] = {
name: $(e).html(),
modelos: {}
};
});
function consultaMarca(marca) {
return new Promise((resolve, reject) => {
return $.ajax({
url: 'http://veiculos.fipe.org.br/api/veiculos/ConsultarModelos',
method: 'POST',
data: {
codigoTipoVeiculo: 1,
codigoTabelaReferencia: 198,
codigoModelo: '',
codigoMarca: marca,
ano: '',
codigoTipoCombustivel: '',
anoModelo: '',
modeloCodigoExterno: ''
}
}).done(resolve);
});
}
function consultaModelo(marca, modelo) {
return new Promise((resolve, reject) => {
$.ajax({
url: 'http://veiculos.fipe.org.br/api/veiculos/ConsultarAnoModelo',
method: 'POST',
data: {
codigoTipoVeiculo: 1,
codigoTabelaReferencia: 198,
codigoModelo: modelo,
codigoMarca: marca,
ano: '',
codigoTipoCombustivel: '',
anoModelo: '',
modeloCodigoExterno: ''
}
}).done(resolve);
});
}
var saveData = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
function export_fip(veiculos) {
saveData(veiculos, 'veiculos.json');
}
function main() {
return new Promise((resolve, reject) => {
var markas = Object.keys(marcas_list);
var funcs = markas.map((marca) => {
return consultaMarca(marca);
});
Promise.all( funcs ).then(
(res) => {
var pairs = [];
var modelos = res.map((r, idx) => {
modelos_ano = {};
const { Modelos, Anos } = r;
var modelos = Modelos.map((modelo, id) => {
modelos_ano[modelo.Value] = {
name: modelo.Label,
anos: {}
};
pairs.push([markas[idx], modelo.Value]);
return modelo.Value;
});
marcas_list[markas[idx]]['modelos'] = modelos_ano;
return modelos;
});
modelos = [].concat.apply([], modelos);
var orig_modelos = modelos;
modelos = modelos.map(modelo => consultaModelo(pairs.filter(p => p[1] == modelo)[0][0], modelo));
Promise.all( modelos ).then((mestre_grilo) => {
var anos = mestre_grilo.map((r, index) => {
var anos = r.reduce((acc, ano) => {
acc[ano.Value] = ano.Label;
return acc;
}, {});
marcas_list[pairs.filter(p => p[1] == orig_modelos[index])[0][0]]['modelos'][orig_modelos[index]]['anos'] = anos;
return anos;
});
resolve(marcas_list);
});
},
() => console.log('deu ruim')
);
});
}
main().then((veiculos) => {
export_fip(veiculos);
});
#/usr/lib/perl
use strict;
use warnings;
use lib qw(..);
use JSON qw( );
use Data::Dumper;
my $filename = 'veiculos.json';
my $json_text = do {
open(my $json_fh, "<:encoding(UTF-8)", $filename)
or die("Can't open \$filename\": $!\n");
local $/;
<$json_fh>
};
my $json = JSON->new;
my $data = $json->decode($json_text);
foreach my $key (keys %$data)
{
print "-- =======================================================================" . "\n";
print "INSERT INTO marcas (id, nome) VALUES (" . $key . ", '" . $data->{$key}->{"name"} . "');" . "\n";
foreach my $modelo (keys %{$data->{$key}->{"modelos"}})
{
print "INSERT INTO modelos (id, marca_id, nome) VALUES (" . $modelo . ", " . $key . ", '" . $data->{$key}->{"modelos"}->{$modelo}->{"name"} . "');" . "\n";
foreach my $ano (keys %{$data->{$key}->{"modelos"}->{$modelo}->{"anos"}})
{
print "INSERT INTO anos (id, modelo_id, nome) VALUES (" . $ano . ", " . $modelo . ", '" . $data->{$key}->{"modelos"}->{$modelo}->{"anos"}->{$ano} . "');" . "\n";
}
}
}
@StefanYohansson
Copy link
Author

Perl dependencies

sudo cpan /data-dumper-names/
sudo cpan JSON

@StefanYohansson
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment