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

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por Itamar M. Lins Jr. »

Olá!

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

Código: Selecionar todos

********************
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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

bloco2.png
E mesmo no fonte postado, parece sumir uma parte.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

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 296 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por Itamar M. Lins Jr. »

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

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

Código: Selecionar todos

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por Itamar M. Lins Jr. »

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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

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

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

Código: Selecionar todos

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

Código: Selecionar todos

FUNCTION TextUntil( cBloco, cText )

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

   RETURN cBloco
c) A função que pega da internet

Código: Selecionar todos

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

Código: Selecionar todos

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 408 vezes
hbmk2 test.prg hbtip.hbc sefazclass.hbc
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

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

Código: Selecionar todos

  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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

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

Código: Selecionar todos

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

tela.png
Por outro lado.... usando PTISO também fica bom pra console !!!
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por Itamar M. Lins Jr. »

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...

Código: Selecionar todos

cBloco := upper(strtran(hb_memoread("cnpj_"+cCNPJ+".html",chr(10),hb_eol() ))
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Pegar dados de uma empresa na NET pelo CNPJ

Mensagem por Itamar M. Lins Jr. »

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.
Saudações,
Itamar M. Lins Jr.
Responder