Clipper On Line • Ver Tópico - leitura de página da internet via Harbour

leitura de página da internet via Harbour

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

leitura de página da internet via Harbour

Mensagempor Daniel » 21 Jun 2018 13:25

Ola
este e com o YAHOO

Try
      oServer:= win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0")
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   Try
      oServer:Open( "GET", 'https://finance.yahoo.com/quote/PETR3.SA/', .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 100000 )
   Catch
      MsgInfo('Erro na Conexão com o Site')
      Return .f.
   End
   cHtml:= oServer:ResponseBody
//  MemoWrit('siteA.txt', cHtml)
   nIni  := At('" window.rapidInstance = new window.YAHOO.i13n.Rapid(rapidConfig);',  cHtml)
   cHtml1:= SubStr( cHtml, nIni)

   nIni  := At('D(ib)" data-reactid="35">',  cHtml1) + 25
   cHtml:= SubStr( cHtml1, nIni)
   nFim  := At('</span>', cHtml) - 1
   msginfo(SubStr(cHtml1, nIni, nFim))

   nIni  := At('" data-reactid="36">',  cHtml) + 20
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('</span>', cHtml1) - 1
   msginfo(SubStr(cHtml, nIni, nFim))
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

leitura de página da internet via Harbour

Mensagempor cjp » 21 Jun 2018 16:34

Daniel,

Em primeiro lugar, obrigado pela ajuda.

Entendi teu código, mas ainda não consegui fazer funcionar aqui.

Em primeiro lugar, está dando erro na compilação por causa do TRY e do msginfo. Talvez falte alguma lib aqui, ou a versão do Harbour que eu estou usando (3.2) seja diferente da tua. Pode me ajudar com isto?

De qualquer forma, coloquei num .txt a leitura completa da página. É bastante código. Consegui achar informações bem próximas à cotação, como "Market open", e "-0,85 (-4,53%)", mas não achei ainda a cotação em si. Me ajude, por favor.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

leitura de página da internet via Harbour

Mensagempor Daniel » 21 Jun 2018 19:21

  
#xcommand TRY              => BEGIN SEQUENCE WITH {|o| break(o)}
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
Function main()

   setMode(25,80)
   Cls
   @ 12, 40 Say 'Aguarde'
   Try
         oServer:= win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0")
   Catch
         alert('Erro na Criação do Serviço')
         Return .f.
   End
   Try
      oServer:Open( "GET", 'https://finance.yahoo.com/quote/PETR3.SA/', .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 100000 )
   Catch
      alert('Erro na Conexão com o Site')
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   @ 12, 40 Say '                '
//  MemoWrit('siteA.txt', cHtml)
   nIni  := At('" window.rapidInstance = new window.YAHOO.i13n.Rapid(rapidConfig);',  cHtml)
   cHtml1:= SubStr( cHtml, nIni)

   nIni  := At('D(ib)" data-reactid="35">',  cHtml1) + 25
   cHtml:= SubStr( cHtml1, nIni)
   nFim  := At('</span>', cHtml) - 1
   cValor:= SubStr(cHtml1, nIni, nFim)
   
   nIni  := At('" data-reactid="36">',  cHtml) + 20
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('</span>', cHtml1) - 1
   cIndice:= SubStr(cHtml, nIni, nFim)
   
   alert('Petroleo Brasileiro S.A. - Petrobras (PETR3.SA): ' + cValor + '  ' + 'Indece do dia: ' + cIndice )
   Return Nil
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

leitura de página da internet via Harbour

Mensagempor cjp » 22 Jun 2018 23:08

Maravilha, muito obrigado.

Funcionou com PETR3, e alguns outros códigos da bolsa, mas não com todos.

Fiz assim, veja se tem algo errado, por favor:

function lercotacoes(cod)
         local link :="https://finance.yahoo.com/quote/"+cod+".SA/"
   
   
      Cls
      @ 5,5 Say 'Lercotacoes: lendo a cotação de '+cod+'; aguarde...'
*      Try
            oServer:= win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0")
*      Catch
*            alert('Erro na Criação do Serviço')
*            Return .f.
*      End
*      Try
         oServer:Open( "GET", link, .f. )
         oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
         oServer:SetRequestHeader( "Connection", "keep-alive" )
         oServer:Send()
         oServer:WaitForResponse( 100000 )
*      Catch
*         alert('Erro na Conexão com o Site')
*         Return .f.
*      End
      cHtml:= oServer:ResponseBody
      @ 12, 40 Say '                '
    //  MemoWrit('siteA.txt', cHtml)
      nIni  := At('" window.rapidInstance = new window.YAHOO.i13n.Rapid(rapidConfig);',  cHtml)
      cHtml1:= SubStr( cHtml, nIni)
   
      nIni  := At('D(ib)" data-reactid="35">',  cHtml1) + 25
      cHtml:= SubStr( cHtml1, nIni)
      nFim  := At('</span>', cHtml) - 1
      cValor:= SubStr(cHtml1, nIni, nFim)
      
      nIni  := At('" data-reactid="36">',  cHtml) + 20
      cHtml1:= SubStr( cHtml, nIni)
      nFim  := At('</span>', cHtml1) - 1
      cIndice:= SubStr(cHtml, nIni, nFim)
      
      ?cod
      ?cValor
      ?link
      inkey(5)
      if empty(cValor)
         ?"cValor vazio"
        tone(261.7,33)
        inkey(11)
        return .f.
      endif
      exqado("insert into acoes (codigo,empresa,dtcotacao,hrcotacao,cotacao,compvenda,quemcad,conta,vinculo) values('"+cod+"','     ','"+dtsql(date())+"','"+time()+"',"+cValor+",0,'automático','  ',0)",nProvAcoes)
      inkey(.2)
return .t.



As linhas do TRY estão comentadas porque ainda não funcionou, não sei porque, mas ainda está dando erro na compilação.

Consegue me explicar porque não está funcionando com todos os códigos?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

leitura de página da internet via Harbour

Mensagempor Jairo Maia » 23 Jun 2018 06:51

Inácio, para funcionar o TRY, coloque acima dessa função (ou no início do .PRG), a seguinte diretiva:
#include "hbcompat.ch"
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

leitura de página da internet via Harbour

Mensagempor cjp » 25 Jun 2018 21:59

Agora funcionou o TRY. Muito obrigado.

Aproveitando, poderia me ensinar a melhorar esse recurso?

Notei que ele usa o begin sequence / recover, que eu já uso, mas desta forma:

             bError := ErrorBlock( {|e| Break(e) } )
             begin sequence
                      ...  (aqui vai o trecho do meu programa que pode eventualmente dar erro)
             recover using e
                   RDDSETDEFAULT("DBFNTX")
                  cMessage := ErrorMessage(e)
                       logerro()
                       mandmail1("error.log","Erro na função... contornado com o recover do begin sequence")
             endsequence
             ErrorBlock( bError )


Creio que esse TRY vai simplificar isso, mas preciso colocar o mandmail com o log do erro. Como posso fazer isso?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

leitura de página da internet via Harbour

Mensagempor André Corrêa » 26 Jun 2018 13:56

Olá cjp,

Com o TRY, CATCH, END, ficaria assim:
TRY
    ...  (aqui vai o trecho do seu programa que pode eventualmente dar erro)
CATCH oError
    RDDSETDEFAULT("DBFNTX")
    cMessage := oError:description
    logerro()
    mandmail1("error.log","Erro na função... contornado com o TRY CATCH")
END


O funcionamento é o mesmo do BEGIN SEQUENCE/RECOVER.
Na verdade, pelo que eu entendi, o Harbour não tem o TRY/CATCH, ele usa a hbcompat.ch para "traduzir" as funções,
conforme trecho retirado do código fonte dela:

/* TRY / CATCH / FINALLY / END */
#xcommand TRY => BEGIN SEQUENCE WITH __BreakBlock()
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS


Abraço,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar de usuário

André Corrêa
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 81
Data de registro: 03 Nov 2015 06:46
Cidade/Estado: Caraguatatuba/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

leitura de página da internet via Harbour

Mensagempor cjp » 07 Jul 2018 23:08

Entendido, obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

leitura de página da internet via Harbour

Mensagempor wanesperes » 26 Jul 2018 22:37

Boa noite, estou com a mesma necessidade. Pegar informações de uma pagina. Mas precisamente o retorno de uma pesquisa de DANFE, porem nao consegui fazer o conteudo da pagina ser salva conforme este exemplo.

///---
oHttp := TIPClientHTTP():new( cUrlWS )
if oHttp:Open()
cRetorno := oHttp:readAll()
Hb_MemoWrit( "buffer.txt", cRetorno )
oHttp:Close()
endif
///--- GEROU ESTE ERRO

│Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
│Error: Unresolved external 'WSAIoctl' referenced from
│C:\MINIGUI\HARBOUR\LIB\HBRTL.LIB|hbsocket
│Error: Unresolved external 'GetAdaptersInfo' referenced from
│C:\MINIGUI\HARBOUR\LIB\HBRTL.LIB|hbsocket
///---

Estou usando Harbour MiniGUI Extended Edition 18.06 (Release)

Fico grato por qualquer ajuda.
wanesperes
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 1
Data de registro: 24 Jul 2018 23:54
Cidade/Estado: rio branco - acre
Curtiu: 0 vez
Mens.Curtidas: 0 vez

leitura de página da internet via Harbour

Mensagempor Mário Isa » 20 Ago 2018 19:34

Boa noite !
Em qual LIB está a função win_OleCreateObject ?

Não consigo abrir sites que tenham https e dá erro de Unsuportted protocol.
Isso é porque esses sites com esse "s" tem uma proteção SSL.
E a função que tenho não abre esses tipos.

Estou tentando utilizar novas funções.

Mário
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

leitura de página da internet via Harbour

Mensagempor alxsts » 21 Ago 2018 00:34

Olá!

Leia os posts do tópico Harbour+ADO+SQL Server 2008 + Automação OLE - Como fazer?. Creio que vá ajudar.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

leitura de página da internet via Harbour

Mensagempor cjp » 25 Fev 2019 15:36

Caros colegas, em especial o Daniel,

O código postado acima pelo Daniel estava funcionando perfeitamente até ontem.

Hoje, estranhamente, parou de funcionar, está fornecendo sempre um valor vazio.

Imagino que possa ter sido alterado alguma coisa na página de origem, mas não consegui identificar.

Veja como está retornando o cHtml:
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

leitura de página da internet via Harbour

Mensagempor Daniel » 25 Fev 2019 16:11

mudar esta linhas
    nIni  := At('D(ib)" data-reactid="34">',  cHtml1) + 25
      cHtml:= SubStr( cHtml1, nIni)
      nFim  := At('</span>', cHtml) - 1
      cValor:= SubStr(cHtml1, nIni, nFim)
      
      nIni  := At('" data-reactid="35">',  cHtml) + 20
      cHtml1:= SubStr( cHtml, nIni)
      nFim  := At('</span>', cHtml1) - 1
      cIndice:= SubStr(cHtml, nIni, nFim)
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

leitura de página da internet via Harbour

Mensagempor cjp » 25 Fev 2019 16:43

Deu certo; muito obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

leitura de página da internet via Harbour

Mensagempor cjp » 11 Jun 2019 14:04

Caro Daniel, e demais colegas.

Hoje de novo este código parou de funcionar.

Creio que deve ter mudado alguma coisa na página de origem.

Consegue me ajudar novamente?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 10 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