leitura de página da internet via Harbour

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

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

leitura de página da internet via Harbour

Mensagem 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.
Anexos
erro.png
Inacio de Carvalho Neto
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

leitura de página da internet via Harbour

Mensagem 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.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

leitura de página da internet via Harbour

Mensagem 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.
Inacio de Carvalho Neto
Responder