Página 5 de 5

leitura de página da internet via Harbour

Enviado: 24 Jul 2021 12:38
por cjp
Certamente o problema é no meu código, porque o dele também funcionou aqui.

O problema é achar onde está o erro no meu código.

Veja: testei o código dele do jeito que ele me mandou, funcionou perfeitamente.

Mas o problema é que preciso de um código genérico, que pegue a cotação de todos os papeis, não apenas da PETR3 (como está no dele).

Testei fazer uma mudança apenas no código dele, para transformar em genérico, e daí já não funciona. Veja:

Código: Selecionar todos

buscacotacao("PETR3")

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

Function buscacotacao(cot)

   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/'+cod+'.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('" data-reactid="30"><span',  cHtml1)
   cHtml1:= SubStr( cHtml1, nIni)

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

   nIni  := At('" data-reactid="32">',  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 + '  ' + 'Indice do dia: ' + cIndice )
   Return Nil
Note que eu só mudei estas linhas:

Código: Selecionar todos

Function buscacotacao(cot)

...

oServer:Open( "GET", 'https://finance.yahoo.com/quote/'+cod+'.SA/', .f. )

Tem algo errado aí? Não consigo ver nada errado.

Agora está dando erro na conexão com o site. Mas antes conectava sem problema, mas não retornava o valor correto.

leitura de página da internet via Harbour

Enviado: 24 Jul 2021 13:02
por ANDRIL
No parâmetro da função esta 'cot' e dentro esta 'cod'.
cjp escreveu:Mas o problema é que preciso de um código genérico, que pegue a cotação de todos os papeis, não apenas da PETR3 (como está no dele).
Já verificou se os demais que precisa pegar seguem a mesma regra de busca usado na PETR3? Pode ser que não sejam iguais.
cjp escreveu:Testei fazer uma mudança apenas no código dele, para transformar em genérico, e daí já não funciona.
O fato de colocar um parâmetro para buscar um papel específico não é motivo para não retornar os dados.

leitura de página da internet via Harbour

Enviado: 24 Jul 2021 13:33
por cjp
Realmente agora o problema era este. Coloquei certo e funcionou no mesmo sistema.
Mas antes já tinha testado com cod certo e não tinha funcionado. Creio que tinha outro erro que eu não tinha visto.
Agradeço a ajuda de todos. Esta função é muito importante para minhas operações na Bolsa. Isto estava me tirando o sono. Muito obrigado.