Página 1 de 3

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 14 Mai 2021 19:04
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.

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 12:14
por JoséQuintas
Atenção:
Problema pra copiar o fonte acima.
As tags são apagadas do fonte.
bloco.png

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 12:23
por JoséQuintas
bloco2.png
E mesmo no fonte postado, parece sumir uma parte.

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 12:27
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 295 vezes

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 12:28
por Itamar M. Lins Jr.
Olá!
o forum comeu os < br > BR entre os sinais maior menor.

Saudações,
Itamar M. Lins Jr.

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 12:34
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()

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 12:42
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.

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 13:23
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 407 vezes
hbmk2 test.prg hbtip.hbc sefazclass.hbc

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 13:25
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

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 13:30
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                                                                                           

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 13:35
por JoséQuintas
tela.png
Por outro lado.... usando PTISO também fica bom pra console !!!

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 13:38
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

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 15:25
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.

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 16:44
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

Pegar dados de uma empresa na NET pelo CNPJ

Enviado: 18 Mai 2021 18:38
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.