Consulta CNPJ online

Publicado por Fernando (última atualização em 27/09/2016)

[ Hits: 16.580 ]

Homepage: https://github.com/phoemur/

Download cnpj.py

Download importaCNPJ2.py (versão 2)




Este pequeno script em Python 3 faz a consulta de dados de CNPJ através do site: http://receitaws.com.br/
Demora um pouco pra pegar os dados mas funciona perfeitamente.

Modo de uso:

$ ./cnpj.py "CNPJ[1]" "CNPJ[2]" ... "CNPJ[N]"

  



Versões atualizadas deste script

Versão 2 - Enviado por Jean em 20/08/2016

Changelog: Realizei a seguinte modificação no scrypt do amigo.
Ao invés de listar na tela as infomações dos CNPJ pesquisados, as informações são gravadas em arquivos de textos, separados dentro do diretório /CNPJ.

Download importaCNPJ2.py


Esconder código-fonte

#!/usr/bin/env python3

import json
import sys
import urllib.request


def usage():
    print('Este script busca informações online sobre números de CNPJ')
    print('Modo de uso: {0} "CNPJ[1]" "CNPJ[2]" ... "CNPJ[N]"'.format(sys.argv[0]))
    sys.exit(1)


def valida_cnpj(cnpj):
    'Recebe um CNPJ e retorna True se formato válido ou False se inválido'

    cnpj = parse_input(cnpj)
    if len(cnpj) != 14 or not cnpj.isnumeric():
        return False

    verificadores = cnpj[-2:]
    lista_validacao_um = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    lista_validacao_dois = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]

    'Calcular o primeiro digito verificador'
    soma = 0
    for numero, ind in zip(cnpj[:-1], range(len(cnpj[:-2]))):
        soma += int(numero) * int(lista_validacao_um[ind])

    soma = soma % 11
    digito_um = 0 if soma < 2 else 11 - soma

    'Calcular o segundo digito verificador'
    soma = 0
    for numero, ind in zip(cnpj[:-1], range(len(cnpj[:-1]))):
        soma += int(numero) * int(lista_validacao_dois[ind])

    soma = soma % 11
    digito_dois = 0 if soma < 2 else 11 - soma

    return verificadores == str(digito_um) + str(digito_dois)


def parse_input(i):
    'Retira caracteres de separação do CNPJ'

    i = str(i)
    i = i.replace('.', '')
    i = i.replace(',', '')
    i = i.replace('/', '')
    i = i.replace('-', '')
    i = i.replace('\\', '')
    return i


def busca_cnpj(cnpj):
    url = 'http://receitaws.com.br/v1/cnpj/{0}'.format(cnpj)
    opener = urllib.request.build_opener()
    opener.addheaders = [
        ('User-agent',
         " Mozilla/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0")]

    with opener.open(url) as fd:
        content = fd.read().decode()

    dic = json.loads(content)

    if dic['status'] == "ERROR":
        print('CNPJ {0} rejeitado pela receita federal\n\n'.format(cnpj))
    else:
        try:
            print('Nome: {0}'.format(dic['nome']))
            print('Nome fantasia: {0}'.format(dic['fantasia']))
            print('CNPJ: {0}   Data de abertura: {1}'.format(dic['cnpj'], dic['abertura']))
            print('Natureza: {0}'.format(dic['natureza_juridica']))
            print('Situação: {0}  Situação especial: {1}  Tipo: {2}'.format(dic['situacao'],
                                                                            dic['situacao_especial'],
                                                                            dic['tipo']))
            print('Motivo Situação especial: {0}'.format(dic['motivo_situacao']))
            print('Data da situação: {0}'.format(dic['data_situacao']))
            print('Atividade principal:')
            print(' '*10 + '{0} - {1}'.format(dic['atividade_principal'][0]['code'],
                                              dic['atividade_principal'][0]['text']))
            print('Atividades secundárias:')
            for elem in dic['atividades_secundarias']:
                print(' '*10 + '{0} - {1}'.format(elem['code'], elem['text']))

            print('Endereço:')
            print(' '*10 + '{0}, {1}'.format(dic['logradouro'],
                                             dic['numero']))
            print(' '*10 + '{0}'.format(dic['complemento']))
            print(' '*10 + '{0}, {1}'.format(dic['municipio'],
                                             dic['uf']))
            print('Telefone: {0}'.format(dic['telefone']))
            print('Email: {0}\n\n'.format(dic['email']))
        except KeyError:
            pass


if __name__ == '__main__':
    if len(sys.argv) == 1 or sys.argv[1] in {'-h', '--help'}:
        usage()

    for arg in sys.argv[1:]:
        if not valida_cnpj(arg):
            print('CNPJ "{0}" tem formato inválido'.format(arg))
        else:
            busca_cnpj(parse_input(arg))

Scripts recomendados

Google scan com interface gráfica

Cotação atual do dólar - versão Python

Enviando mensagens para celulares TIM

Simples Cliente FTP em Python

Preço do Dólar, Bitcoin e Euro em Python


  

Comentários
[1] Comentário enviado por primas em 21/02/2017 - 14:09h

Pessoal esta sendo exibida a seguinte mensagem:
Traceback (most recent call last):
File "C:\Users\Fiscal\Desktop\CNPJ\CNPJ.py", line 110, in <module>
busca_cnpj(parse_input(listaCNPJ))
File "C:\Users\Fiscal\Desktop\CNPJ\CNPJ.py", line 60, in busca_cnpj
with opener.open(url) as fd:
File "C:\Users\Fiscal\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 532, in open
response = meth(req, response)
File "C:\Users\Fiscal\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 642, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Users\Fiscal\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 570, in error
return self._call_chain(*args)
File "C:\Users\Fiscal\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 504, in _call_chain
result = func(*args)
File "C:\Users\Fiscal\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 650, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 504: Gateway Time-out

[2] Comentário enviado por primas em 21/02/2017 - 14:10h

Vcs sabem qual seria o problema?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts