Clipper On Line • Ver Tópico - Pegar dados de uma empresa na NET pelo CNPJ

Pegar dados de uma empresa na NET pelo CNPJ

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor Itamar M. Lins Jr. » 14 Mai 2021 19:04

Olá!

Funciona no Linux/Windows
Compilar:
hbmk2 cnpj_dados.prg -lhbtip -w3

********************
Function Main(cCNPJ)
********************
*
*
If empty(cCNPJ) .or. len(cCNPJ) > 14 .or. len(cCNPJ) < 14
   alert("Informe o CNPJ corretamente !")
   cCNPJ := "60316817000103" //CNPJ -> Microsoft //"5311379100012"
EndIf

GetCNPJ(cCNPJ)

Return Nil

***********************
Function GetCNPJ(cCNPJ)
***********************
*
*
Local cRazao, cFantasia, cEndereco, cBairro, cCidade
Local cURL, oHTTP, cBloco, nInicio, nFim, cCEP

If empty(cCNPJ)
   hwg_Msginfo("Informe o CNPJ")
   return .f.
EndIf

cURL := "http://cnpj.info/"+cCNPJ
oHTTP:= TIPClientHTTP():New( cURL )

IF oHTTP:Open()

   IF oHTTP:ReadToFile( "cnpj_"+cCNPJ+".html" )
   Else
      alert( "Erro gravando dados do CNPJ: "+cCNPJ, oHTTP:lastErrorMessage() )
   EndIF

Else
   alert( "Erro conectando: ", oHTTP:lastErrorMessage() )
   RETURN .F.
   
ENDIF

cBloco := upper( hb_memoread("cnpj_"+cCNPJ+".html") )

cBloco := substr(cBloco,hb_at("<BODY>",cBloco) ,hb_at("</BODY>",cBloco) )

nInicio := hb_at("NOME DA EMPRESA",cBloco)
nFim := hb_At( "</A>", cBloco, nInicio)  - nInicio

cRazao := substr(cBloco,nInicio,nFim )
cRazao := substr( cRazao, hb_rat(">",cRazao)+1 )

? cRazao

cBloco := substr(cBloco,nInicio+nFim)

nInicio := hb_at("FANTASIA NOME",cBloco)
nFim := hb_At( "</A>", cBloco, nInicio)  - nInicio

cFantasia := substr(cBloco,nInicio,nFim )
cFantasia := substr( cFantasia, hb_rat(">",cFantasia)+1 )

? cFantasia

cBloco := substr(cBloco,nInicio+nFim)

nInicio := hb_rat("ENDERE",cBloco)+15
nFim := hb_At( "CONTATOS", cBloco, nInicio) - nInicio - 5

//Tem endereço com 4 e 5 linhas
cBloco := substr(cBloco,nInicio,nFim)
? mlcount(cBloco)

lRef := mlcount(cBloco) == 5

nInicio := hb_rat("ENDERE",cBloco)+15
nFim := hb_At('<BR>', cBloco, nInicio)  - nInicio

cEndereco := substr(cBloco,nInicio,nFim )
cEndereco := substr( cEndereco, hb_rat(">",cEndereco)+1 )

? "Endereco: " + cEndereco

If lRef

cBloco := substr(cBloco,nInicio+nFim+5)

nInicio := 1
nFim := hb_At( "<BR>", cBloco)-1

cRef := substr(cBloco,nInicio,nFim )
cRef := substr( cRef, hb_at(">",cRef)+1 )

? "Referencia: ", cRef

EndIf

cBloco := substr(cBloco,nInicio+nFim+5)

nInicio := 1
nFim := hb_At( "<BR>", cBloco)-1

cBairro := substr(cBloco,nInicio,nFim )
cBairro := substr( cBairro, hb_at(">",cBairro)+1 )

? "Bairro: ", cBairro

cBloco := substr(cBloco,nInicio+nFim+5)

nInicio := 1
nFim := hb_At( "<BR>", cBloco)-1
cCidade := substr(cBloco,nInicio,nFim )

? "Cidade: ", cCidade

cBloco := substr(cBloco,nInicio+nFim + 5)
nInicio := 1
nFim := 9
cCep :=  substr(cBloco,nInicio,nFim )

? "Cep: ", cCep

//cBloco := substr(cBloco,nInicio+nFim+2)
? '----'
//? cBloco
hb_vferase("cnpj_"+cCNPJ+".html")
Return .T.



Divirtam-se!

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 12:14

Atenção:
Problema pra copiar o fonte acima.
As tags são apagadas do fonte.


bloco.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 12:23

bloco2.png


E mesmo no fonte postado, parece sumir uma parte.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 12:27

Só deu certo usando a opção de moderador, editar o post original, pra poder copiar o fonte original.
Aqui o fonte original em PRG.

test.prg
(2.77 KiB) Baixado 68 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor Itamar M. Lins Jr. » 18 Mai 2021 12:28

Olá!
o forum comeu os < br > BR entre os sinais maior menor.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 12:34

d:\temp>test
MICROSOFT INFORMATICA LTDA
MICROSOFT
2
Endereco: ENTE JUSCELINO KUBITSCHEK 1909, 1909
Bairro:  CONJ 161 ANDAR 16 TORRE SUL
Cidade:  VILA NOVA CONCEICAO
Cep:  SAO PAULO
----


Troquei hwg_MsgInfo() por Alert()
Parece que precisa ajuste no endereço.

E pelo menos aqui, o hbmk2 mostrou a dica do que acrescentar pra compilar:
hbmk2: Hint: Add input file 'hbtip.hbc' for missing Harbour function(s):
TIPClientHTTP()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor Itamar M. Lins Jr. » 18 Mai 2021 12:42

Olá!
Parece que precisa ajuste no endereço.

É só puxar lá mais para esquerda. nInicio := hb_rat("ENDERE",cBloco)+9 está 15
Mas está funcionando.
Agora se houver muitas consultas, eles barram o IP.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 13:23

Achei lenta a consulta.
Modifiquei bastante, mas pra teste.

a) Uma função pra pegar o texto a partir de uma chave

FUNCTION TextAfter( cBloco, cText )

   cBloco := Substr( cBloco, At( cText, cBloco ) + Len( cText ) )

   RETURN cBloco


b) Uma função pra pegar o texto até uma chave

FUNCTION TextUntil( cBloco, cText )

   cBloco := Substr( cBloco, 1, At( cText, cBloco ) - 1 )

   RETURN cBloco


c) A função que pega da internet

FUNCTION GetFromInternet( cUrl )

   LOCAL cBloco := "", cFile := "d:\temp\lixo.txt"
   LOCAL oHttp

   oHTTP:= TIPClientHTTP():New( cURL )
   IF oHTTP:Open()
      IF oHTTP:ReadToFile( cFile )
         cBloco := hb_memoread( cFile )
         fErase( cFile )
         Alert( "Erro gravando dados do CNPJ", oHTTP:lastErrorMessage() )
      ENDIF
   ELSE
      Alert( "Erro conectando: ", oHTTP:lastErrorMessage() )
   ENDIF

   RETURN cBloco


d) Pegando a informação, pra teste, usando as funções acima e mais XmlNode() da sefazclass, mas que pode ser substituída por algo mais simples

FUNCTION GetCNPJ( cCNPJ )

   LOCAL cRazao, cFantasia
   LOCAL cBloco, cText, cBlocoEndereco, aList

   cBloco := GetFromInternet( "http://cnpj.info/" + cCNPJ )

   cBloco := TextAfter( cBloco, "<table>" )
   cRazao := XmlNode( cBloco, "a" )

   ? cRazao

   cBloco := TextAfter( cBloco, "</tr>" )

   cFantasia := XmlNode( cBloco, "a" )

   ? cFantasia

   cBloco := TextAfter( cBloco, "</h3>" )
   cBlocoEndereco := TextUntil( cBloco, "<h3>" )
   aList := hb_RegExSplit( "<br>", cBlocoEndereco )
   FOR EACH cText IN aList
      ? "Endereço " + Str( cText:__EnumIndex, 2 ) + " " + cText
   NEXT

   RETURN .T.


Uma XmlNode simples seria pegar de [tag] até [/tag] (usando colchetes pra não ser apagado do post)

test.prg
(1.55 KiB) Baixado 51 vezes


hbmk2 test.prg hbtip.hbc sefazclass.hbc
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 13:25

Esqueci de um ELSE nesta parte, quando modifiquei de .NOT. pra Ok.

  IF oHTTP:ReadToFile( cFile )
         cBloco := hb_memoread( cFile )
         fErase( cFile )
ELSE // <<=== faltou este ELSE
         Alert( "Erro gravando dados do CNPJ", oHTTP:lastErrorMessage() )
      ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 13:30

teste.png


No Windows 10 agora é complicado usar o copiar/colar da tela.
Fica igual abaixo

d:\temp>test                                                                                                                                                                                            MICROSOFT INFORMATICA LTDA                                                                          MICROSOFT INFORMATICA LTDA                                                                          EndereÏ„o  1                                                                                         Avenida Presidente Juscelino Kubitschek 1909, 1909                                                  EndereÏ„o  2                                                                                         Conj 161 Andar 16 Torre Sul                                                                         EndereÏ„o  3                                                                                         VILA NOVA CONCEICAO                                                                                 EndereÏ„o  4                                                                                         SAO PAULO - SP                                                                                      EndereÏ„o  5                                                                                         04543-907                                                                                           
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 13:35

tela.png


Por outro lado.... usando PTISO também fica bom pra console !!!
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 13:38

Lembrando:
Acho que essa é uma diferença no Windows 10 que estou usando.
21H1, a de maio/2021 que vai ser liberada agora.

Agora o console usa a mesma codepage do Windows.

Putz... que legal... minha codepage default é a mesma default do Windows !!!!!
A do meu editor de textos, o programmers notepad !!!
Agora que vi isso - PARA O CONSOLE
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor Itamar M. Lins Jr. » 18 Mai 2021 15:25

Olá!
Eu fiz no Linux os teste preliminares. Depois coloquei no meu sistema. No RUINDOWS eca!!!
Esqueci de informar que precisa usar STRTRAN no hb_memoread().
O mundo todo usa LineFeed para final de linha e a Microsoft(lindinha) por questões de compatibilidade com o antigão DOS ? usar Carriage Return + Line Feed CHR(10)+CHR(13).
Precisa colocar no RUINDOWS...
cBloco := upper(strtran(hb_memoread("cnpj_"+cCNPJ+".html",chr(10),hb_eol() ))


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor JoséQuintas » 18 Mai 2021 16:44

Itamar M. Lins Jr. escreveu:O mundo todo usa LineFeed para final de linha e a Microsoft(lindinha) por questões de compatibilidade com o antigão DOS ? usar Carriage Return + Line Feed CHR(10)+CHR(13).


inverteu.
Chr(13) = ENTER ou New Line
Chr(10) = Line Feed

lf.png


Tem certeza que o mundo todo usa LF ?
A Microsoft e a Apple são lindinhas.... kkkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Mensagempor Itamar M. Lins Jr. » 18 Mai 2021 18:38

Olá!
Tá variando ?
Onde está o erro ? Na posição 10 13 ou 13 10 ...Basta entender o problema.
Apple = BSD -> LINUX(Unix) vai ler mais um pouco.
É da forma que escrevi mesmo. A resposta está no código postado.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 18 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro