Página 2 de 5
leitura de página da internet via Harbour
Enviado: 21 Jun 2018 13:25
por Daniel
Ola
este e com o YAHOO
Código: Selecionar todos
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))
leitura de página da internet via Harbour
Enviado: 21 Jun 2018 16:34
por cjp
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.
leitura de página da internet via Harbour
Enviado: 21 Jun 2018 19:21
por Daniel
Código: Selecionar todos
#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
leitura de página da internet via Harbour
Enviado: 22 Jun 2018 23:08
por cjp
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:
Código: Selecionar todos
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?
leitura de página da internet via Harbour
Enviado: 23 Jun 2018 06:51
por Jairo Maia
Inácio, para funcionar o TRY, coloque acima dessa função (ou no início do .PRG), a seguinte diretiva:
leitura de página da internet via Harbour
Enviado: 25 Jun 2018 21:59
por cjp
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:
Código: Selecionar todos
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?
leitura de página da internet via Harbour
Enviado: 26 Jun 2018 13:56
por André Corrêa
Olá
cjp,
Com o TRY, CATCH, END, ficaria assim:
Código: Selecionar todos
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:
Código: Selecionar todos
/* TRY / CATCH / FINALLY / END */
#xcommand TRY => BEGIN SEQUENCE WITH __BreakBlock()
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS
Abraço,
leitura de página da internet via Harbour
Enviado: 07 Jul 2018 23:08
por cjp
Entendido, obrigado.
leitura de página da internet via Harbour
Enviado: 26 Jul 2018 22:37
por wanesperes
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.
leitura de página da internet via Harbour
Enviado: 20 Ago 2018 19:34
por Mário Isa
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
leitura de página da internet via Harbour
Enviado: 21 Ago 2018 00:34
por alxsts
leitura de página da internet via Harbour
Enviado: 25 Fev 2019 15:36
por cjp
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:
leitura de página da internet via Harbour
Enviado: 25 Fev 2019 16:11
por Daniel
mudar esta linhas
Código: Selecionar todos
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)
leitura de página da internet via Harbour
Enviado: 25 Fev 2019 16:43
por cjp
Deu certo; muito obrigado.
leitura de página da internet via Harbour
Enviado: 11 Jun 2019 14:04
por cjp
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?