Este projeto foi criado com o objetivo de importar para um banco de dados (MySQL) os arquivos (CSV) com os dados públicos dos cadastros de CNPJ que são disponibilizados pela Receita Federal do Brasil, e, futuramente, exportar estes dados por meio de uma API (REST e GraphQL).
Abaixo você encontrará as instruções com os passos preparativos para a importação dos dados e como fazer para importá-los para o banco de dados. Os comandos mostrados abaixo assumem que você estará utilizando uma distribuição do Sistema Operacional Linux (no momento do desenvolvimento deste projeto eu estava utilizando a Distro Ubuntu 20.04); então se você estiver utilizando outro S.O.(Windows ou MacOS X) talvez você precisará adaptar alguns comandos (ai é com você).
Nota: Como este é o meu primeiro projeto em Rust, desculpe ai se o código não está tão bonito. De qualquer forma, ele funciona.
Se quiser apenar utilizar os binários deste projeto em contêineres do Docker, veja o repositório [https://github.com/gibalmeida/dados_abertos_cnpj-docker]. Lá tem dois contêineres: um que faz o Mirroring dos arquivos da Receita e um outro para o serviço de GraphQL.
Você vai precisar dos arquivos com os dados públicos do CNPJ disponibilizados pela Receita Federal do Brasil, os quais você poderá baixa da página deste link.
Seja muito paciente para baixar os arquivos, pois o site é bem lento e como são vários arquivos, alguns bem grandes, vai demorar bastante. Eu recomendo que, ao invés de utilizar o navegador, se utilize alguma ferramenta para baixar estes arquivos. No meu caso eu utilizo o comando
wget
com parâmetro--tries=0
(tentativas infinitas) para cada URL dos arquivos disponibilizados; daí e deixo o comando rodando até que ele consiga fazer o downloads de todos os arquivos. Quem sabe?!? Talvez, no futuro eu faça um script que rode no cron, e que baixe todos os arquivos uma vez por mês (todo mes tem atualizaçã) e importe todos eles novamente para o banco de dados.
Se não tiver o Rust instaldo no seu S.O, você precisará instalar ele para conseguir fazer o importador funcionar.
Para instalar o Rust é só seguir as instruções na página deste link.
Depois de instalado o Rust, e se ele estiver funcionando corretamente, você precisa instalar o Diesel CLI. É só executar o seguinte comando:
cargo install diesel_cli
Você poderá encontrar mais informações sobre o Diesel no seguinte link.
Aqui o primeiro passo é editar o arquivo .env
e configurar os dados da conexão com o banco de dados na variavel de ambiente DATABASE_URL
, conforme exemplo a seguir:
DATABASE_URL=mysql://usuario:senha@endereco.do.servidor.mysql:porta/nome_do_banco_de_dados_mysql
Depois, se você ainda não criou o banco de dados, crie ele e dê ao usuário que você especificou na variável de ambiente DATABASE_URL
permissões para acessar e criar tabelas (para não ter dores de cabeça, dê todas as permissões no banco de dados para o usuário que você especificar, ou utilize o usuário root
).
E por fim, para criar as tabelas necessárias no banco de dados, execute o seguinte comando:
diesel migration run
A importação dos dados a partir dos arquivos CSV compactados em formato ZIP é bem simples. Para cada arquivo .zip basta executar o comando importer com o caminho do arquivo como parâmetro, conforme o formato abaixo:
Antes de executar o comando abaixo no seu terminal, você deve ir (
cd
) para está dentro da pastadados_abertos_cnpj
(pasta do projeto). Ex:cd /meusprojetos/dados_abertos_cnpj
cargo run --bin importer CAMINHO_DO_ARQUIVO_CSV_COMPACTADO
Onde CAMINHO_DO_ARQUIVO_CSV_COMPACTADO deverá ser substituído pelo caminho completo do arquivo compactado que será processado pelo comando (ex: /home/user/Downloads/K3241.K03200Y0.D10911.ESTABELE.zip
).