Converter HTML para Texto

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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter HTML para Texto

Mensagem por asimoes »

Pessoal,

Como não achei nada na internet e falta de tempo mesmo, acabei criando uma função para isso:

Qualquer sugestão fiquem a vontade para melhorar a função, a principio está me atendendo.

Uso: Html2Texto(cArquivo)

Código: Selecionar todos

FUNCTION Html2Texto(cArq)
LOCAL cTexto:="", cLinha:="", nLinha, nPosIni, nPosFim, cChar

   FT_FUSE( cArq )
   DO WHILE !FT_FEOF()
      cLinha:=FT_FREADLN()
      cLinha:=StrTran( cLinha, Chr(12)) // Elimina caracter EJECT
      cLinha:=StrTran( cLinha, Chr(13))
      FOR nLinha:=1 TO Len(cLinha)
         nPosIni:=At('<', cLinha)
         nPosFim:=At('>', cLinha)
         cChar:=SubStr(cLinha,nPosIni,nPosFim)
         cLinha:=StrTran(cLinha,cChar)
         //? cLinha, nPosIni, nPosFim  
         //inkey(0)
         IF nPosIni == 0 .AND. nPosFim == 0
            EXIT
         ENDIF
      NEXT
      cTexto+=cLinha
      FT_FSKIP()
   ENDDO
   FT_FUSE()
//HTML exemplo:
/*<html>
<body>
<center><b><font color="#0000FF">Email enviado com sucesso</font></b></center>
</body>
</html>*/
RETURN cTexto
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Converter HTML para Texto

Mensagem por Pablo César »

Parece haver algum erro, não está retornando corretamente o conteúdo até o final de arquivo. Vou verificar mais tarde e posto o resultado. O uso das funções FT_* tinham um bug, que foi consertado, não sei ao certo ainda se é isso. Mas vou ver mais tarde...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Converter HTML para Texto

Mensagem por Pablo César »

Na sua função, de interpretar linha a linha, falta elaborar mais fim de interpretar por exemplo:

- As tags  <br /> <br />  para desdobrar as quebras de linhas do próprio texto do html.
- As macros do próprio php  &?acute;  os  ç  para transformar em acentos, c cedilhas do texto do html

Enfim um série de tags que podem compor um html.

Na minha opinião, a utilização da função oActiveX:ExecWB() que marca e copia para a área de transferência é mais fácil de obter o mesmo ou quase o mesmo resultado. Exemplo dessa utilização eu faço no módulo WebGets.prg do Aplicativo para alterar data e hora na inicialização-Windows onde capturo a tela, copio na área de transferência e leio em forma de string o seu conteúdo em texto.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter HTML para Texto

Mensagem por asimoes »

Olá Pablo,

Se você olhar no final da função tem um exemplo de html que é o objeto do meu problema.
A função já funcionou comigo usando as funções FT* e tudo que está entre < > inclusive é eliminado do texto.
ficando somente o texto do exemplo: Email enviado com sucesso
A função que eu fiz não é solução definitiva, pode ser melhorada.

*/<html>
<body>
<center><b><font color="#0000FF">Email enviado com sucesso</font></b></center>
</body>
</html>*/
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Converter HTML para Texto

Mensagem por Pablo César »

Pois é... pra mim não deu muito certo não. Gravei esta página deste tópico em htm e quis ver o resultado mas abortou quando encontrou o primeiro tag  <head> 
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter HTML para Texto

Mensagem por asimoes »

Pablo,

Eu estou usando o harbour baixado pelo svn.

Meu programa de teste que funcionou. ou melhor está funcionando. acabei de testar.

Código: Selecionar todos

FUNCTION MAIN
CLS
IF Inetestaconectada()=.F.
   alert("para testar essa função você deve ter acesso a internet, favor vereficar")
   RETURN Nil
ENDIF
Consulta()
RETURN Nil

FUNCTION Consulta
LOCAL oPg  :=Win_OleCreateObject("Microsoft.XMLHTTP")
oPg:Open("GET",'http://xxxxxxx.xxx.xx.xxx.br/cgi-bin/EnviaEmail_CGI.exe?Nome=Teste&Assunto=Teste de email Harbour&Destinos=[]Equipe03&CC=[]Equipe07&BCC=asimoesluz@gmail.com&ResponderPara=&Origem=hhelpdes@smf.com&EhErro=F&Html=F&Corpo="Testando envio de email com o Harbour"')
oPg:Send()
DelayResposta(3)
cBuf:=oPg:responseText
IF File("resposta.txt")
   FErase("resposta.txt")
ENDIF

EscreveLinha(cBuf,"resposta.txt")

cResposta:=Html2Texto("resposta.txt")

IF Empty(cResposta)
   alert("Email não enviado.")
ELSE
   alert(cResposta)
ENDIF
quit

RETURN Nil

FUNCTION DelayResposta(nDelay)
FOR I:=1 TO nDelay
   Inkey(1)
NEXT
RETURN Nil


FUNCTION Html2Texto(cArq)
LOCAL cTexto:="", cLinha:="", nLinha, nPosIni, nPosFim, cChar

   FT_FUSE( cArq )
   DO WHILE !FT_FEOF()
      cLinha:=FT_FREADLN()
      cLinha:=StrTran( cLinha, Chr(12)) // Elimina caracter EJECT
      cLinha:=StrTran( cLinha, Chr(13))
      FOR nLinha:=1 TO Len(cLinha)
         nPosIni:=At('<', cLinha)
         nPosFim:=At('>', cLinha)
         cChar:=SubStr(cLinha,nPosIni,nPosFim)
         cLinha:=StrTran(cLinha,cChar)
         //? cLinha, nPosIni, nPosFim  
         //inkey(0)
         IF nPosIni == 0 .AND. nPosFim == 0
            EXIT
         ENDIF
      NEXT
      cTexto+=cLinha
      FT_FSKIP()
   ENDDO
   FT_FUSE()
/*<html>
<body>
<center><b><font color="#0000FF">Email enviado com sucesso</font></b></center>
</body>
</html>*/
RETURN cTexto

FUNCTION inetestaconectada( cAddress )
LOCAL aHosts, cName
InetInit()
IF cAddress == NIL
   cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .OR. Len(aHosts)=0
   InetCleanup()
   RETURN .F.
ENDIF
InetCleanup()
RETURN .T.

FUNCTION AbreLinha(nLinha,cArq)
LOCAL I
DEFAULT nLinha TO 1
   FOR I:=1 TO nLinha
      StrFile(""+HB_OsNewLine(),cArq,.T.)
   NEXT
RETURN Nil

FUNCTION EscreveLinha(cVar,cArq)
   StrFile(cVar,cArq,.T.)
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter HTML para Texto

Mensagem por asimoes »

Pablo,

Vi que você está usando activex, tem como adaptar pro exemplo que postei?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Converter HTML para Texto

Mensagem por Pablo César »

Mas a questão que teria que exibir a página, posicionar-se e aí capturar, entendeu ? Seria o caso diferente do que você fez. Pois deveria baixar página, não sei se daria de copiar sem exibir...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Converter HTML para Texto

Mensagem por rochinha »

Amiguinhos,

Voces poderia tentar com esta função:

Código: Selecionar todos

FUNCTION CleanHTML( cfile )
    LOCAL oExplorer := TOLEAuto():New( "InternetExplorer.Application" ) 
    oExplorer:Navigate2( cfile ) 
    DO WHILE oExplorer:ReadyState <> 4 
       HB_IDLESLEEP( 1 ) 
    ENDDO
    cINNText := oExplorer:Document:Body:InnerText 
    MemoWrit( "t.txt", cINNText )
    MemoEdit( MemoRead( "t.txt" ) )
    oExplorer:Quit() 
    RETURN NIL
Passando no parametro o URL.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Converter HTML para Texto

Mensagem por rochinha »

Amiguinhos,

Por favor me informem qual a biblioteca do HARBOUR que possui as funções FT_*.

Tenho uma porrada de bibliotecas e duzentas versões de Harbour aqui mas não encontrei.

Obrigado.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Converter HTML para Texto

Mensagem por Pablo César »

Por favor me informem qual a biblioteca do HARBOUR que possui as funções FT_*.
É da contrib hbnf Rochinha.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Converter HTML para Texto

Mensagem por rochinha »

Amiguinho,

Valeu, vou acrescenta-la agora, apesar de ter olhado internamente a procura das funções.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter HTML para Texto

Mensagem por asimoes »

Olá Rochinha,

O seu exemplo funcionou perfeitamente.
A biblioteca ft* é a hbnf
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Converter HTML para Texto

Mensagem por clodoaldomonteiro »

Boa tarde,

Retomando esse tópico, pergunto se tem como pegarmos um HTML e transformarmos em Dados, como por exemplo, separado por vírgula .CSV?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder