leitura de página da internet via Harbour

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

Moderador: Moderadores

Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

leitura de página da internet via Harbour

Mensagem por Daniel »

Ola tente assim

Código: Selecionar todos

  
   nIni  := At('" window.rapidInstance = new window.YAHOO.i13n.Rapid(rapidConfig);',  cHtml)
   cHtml1:= SubStr( cHtml, nIni)

   nIni  := At('" data-reactid="30"><span',  cHtml1)  // coloque mais esta duas linhas
   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)
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
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 »

Não funcionou não. cValor está vazio.
Inacio de Carvalho Neto
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

leitura de página da internet via Harbour

Mensagem por Daniel »

Aqui esta funcionando
Anexos
Sem título 1.png
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
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 »

É estranho, mas aqui não funciona.

Estou fazendo assim:

Código: Selecionar todos

function lendocot(cod,or)
         local link :="https://finance.yahoo.com/quote/"+cod+".SA/"

        oServer:= win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0")
	      oServer:Open( "GET", link, .f. )
	      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
	      oServer:SetRequestHeader( "Connection", "keep-alive" )
	      oServer:Send()
	      oServer:WaitForResponse( 200000 )

	   cHtml:= oServer:ResponseBody


  
   nIni  := At(' window.rapidInstance = new window.YAHOO.i13n.Rapid(rapidConfig);',  cHtml)
   cHtml1:= SubStr( cHtml, nIni)

   
   nIni  := At(' data-reactid="30">',  cHtml1) + 25
   cHtml:= SubStr( cHtml1, nIni)
   nFim  := At('', cHtml) - 1
   cValor:= SubStr(cHtml1, nIni, nFim)
   

   nIni  := At(' data-reactid="32">',  cHtml) + 20
   cHtml1:= SubStr( cHtml, nIni)
   
   nFim  := At('', cHtml1) - 1
   cIndice:= SubStr(cHtml, nIni, nFim)
Pelos testes que fiz, o problema estaria neste trecho:

Código: Selecionar todos

    nIni  := At('" data-reactid="30">',  cHtml1) + 25
   cHtml:= SubStr( cHtml1, nIni)
   nFim  := At('', cHtml) - 1
   cValor:= SubStr(cHtml1, nIni, nFim)
Veja no anexo o que está retornando o teste que fiz. Não achei o valor neste trecho, embora exista o data-reactid="30".

Pode me ajudar? Estou fazendo algo errado?
Anexos
cotacao.png
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

leitura de página da internet via Harbour

Mensagem por Itamar M. Lins Jr. »

Olá!
Copia o código do Daniel e cola no seu.
Rapidamente eu já vi 2 ou 3 difereças.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
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 »

A diferença que vc menciona é com relação às aspas, correto?
Eu tirei porque acho que está errado.
Veja, por exemplo:

nIni := At('" window.rapidInstance = new window.YAHOO.i13n.Rapid(rapidConfig);', cHtml)

Tem uma aspa dupla sobrando aí.

Eu testei primeiro da forma como ele colocou, e não achou essa expressão. Quando tirei a aspa dupla, ele achou.

Se não for disso que vc está falando, por favor, me indique especificamente. Obrigado.
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

leitura de página da internet via Harbour

Mensagem por Itamar M. Lins Jr. »

Olá!
O ultimo nFim do Daniel está como ?
Coloca ele debaixo do seu ultimo nFim... Estão iguais ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
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 »

codigo.png
Realmente não.
Vi agora que tem um problema aqui no fórum. Clicando em ver código, o código não aparece como está aqui. Veja a imagem anexa.
Copiei o código agora diretamente daqui, mas ainda não deu certo.
Agora, estranhamente, o cHtml inicial está bem diferente:

Código: Selecionar todos

<!DOCTYPE html>
<html lang="en-us">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Yahoo</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimal-ui">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <style>
      html {
          height: 100%;
      }
      body {
          background: #fafafc url(https://s.yimg.com/nn/img/sad-panda-201402200631.png) 50% 50%;
          background-size: cover;
          height: 100%;
          text-align: center;
          font: 300 18px "helvetica neue", helvetica, verdana, tahoma, arial, sans-serif;
          margin: 0;
      }
      table {
          height: 100%;
          width: 100%;
          table-layout: fixed;
          border-collapse: collapse;
          border-spacing: 0;
          border: none;
      }
      h1 {
          font-size: 42px;
          font-weight: 400;
          color: #400090;
      }
      p {
          color: #1A1A1A;
      }
      #message-1 {
          font-weight: bold;
          margin: 0;
      }
      #message-2 {
          display: inline-block;
          *display: inline;
          zoom: 1;
          max-width: 17em;
          _width: 17em;
      }
      </style>
      <script>
      
      </script>
  </head>
  <body>
  <!-- status code : 502 -->
  <!-- Could Not Connect -->
  <!-- host machine: e15.ycpi.bra.yahoo.com -->
  <!-- timestamp: 1627056994.541 -->
  <!-- url: https://finance.yahoo.com/quote/PETR3%20%20.SA/-->
  <script type="text/javascript">
    function buildUrl(url, parameters){
      var qs = [];
      for(var key in parameters) {
        var value = parameters[key];
        qs.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
      }
      url = url + "?" + qs.join('&');
      return url;
    }

    function generateBRBMarkup(site) {
      params.source = 'brb';
      generateBeaconMarkup(params);
      var englishHeader = 'Will be right back...';
      var englishMessage1 = 'Thank you for your patience.';
      var englishMessage2 = 'Our engineers are working quickly to resolve the issue.';
      var defaultLogoStyle = '';
      var siteDataMap = {
        'default': {
          logo: 'https://s.yimg.com/rz/p/yahoo_frontpage_en-US_s_f_p_205x58_frontpage.png',
          logoAlt: 'Yahoo Logo',
          logoStyle: defaultLogoStyle,
          header: englishHeader,
          message1: englishMessage1,
          message2: englishMessage2
        }
      };

      var siteDetails = siteDataMap['default'];

      document.write('<table><tbody><tr><td>');
      document.write('<div id="content">');
      document.write('<img src="' + siteDetails['logo'] + '" alt="' + siteDetails['logoAlt'] + '" style="' + siteDetails['logoStyle'] + '">');
      document.write('<h1 style="margin-top:20px;">' + siteDetails['header'] + '</h1>');
      document.write('<p id="message-1">' + siteDetails['message1'] + '</p>');
      document.write('<p id="message-2">' + siteDetails['message2'] + '</p>');
      document.write('</div>');
      document.write('</td></tr></tbody></table>');
    }

    function generateBeaconMarkup(params) {
        document.write('<img src="' + buildUrl('//geo.yahoo.com/b', params) + '" style="display:none;" width="0px" height="0px"/>');
        var beacon = new Image();
        beacon.src = buildUrl('//bcn.fp.yahoo.com/p', params);
    }

    var hostname = window.location.hostname;
    var device = 'desktop';
    var ynet = ('-' === '1');
    var time = new Date().getTime();
    var params = {
        s: '1197757129',
        t: time,
        err_url: document.URL,
        err: '502',
        test: '-',
        ats_host: 'e15.ycpi.bra.yahoo.com',
        rid: '-',
        message: 'Could Not Connect'
    };

    if(ynet) {
        document.write('<div style="height: 5px; background-color: red;"></div>');
    }
    generateBRBMarkup(hostname, params);

  </script>
  <noscript>
  <table>
    <tbody>
      <tr>
        <td>
          <div id="englishContent">
            <h1 style="margin-top:20px;">Will be right back...</h1>
            <p id="message-1">Thank you for your patience.</p>
            <p id="message-2">Our engineers are working quickly to resolve the issue.</p>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
  </noscript>
  </body>
</html>
Anexos
cotacao.png
Inacio de Carvalho Neto
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

leitura de página da internet via Harbour

Mensagem por Daniel »

faz o teste com o prg que estou usando
Anexos
DEMO1.PRG
(4.1 KiB) Baixado 595 vezes
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
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 »

Pois é, veja que estranho: com o teu prg, funcionou perfeitamente.

Mas, quando coloquei no meu sistema, não funcionou.

Veja que fiz pouquíssimas alterações, apenas para ajudar o que preciso (passar o código em cada caso):

Código: Selecionar todos

Function lendocot(cod,or)
   Cls
   @ 12, 40 Say 'Aguarde'
      oServer:= win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0")
	   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 )
	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)

	   @ 14,5 say "Valor: "+substr(cValor,1,10)+"                       "
	   inkey(1.5)
Tirei a aspa que estava sobrando para testar, mas antes já tinha testado do jeito que estava, com as aspas, e também não funcionou no meu sistema (embora tenha funcionado no teu).

Estou juntado uma imagem dos resultados do nIni em cada caso. O XX depois do código eu coloquei apenas para verificar se não teria algo um espaço indevido depois do código.

Não consigo enxergar o que estou fazendo errado. Pode me ajudar?
Anexos
cotacao.png
cotacao.png (5.09 KiB) Exibido 3230 vezes
Inacio de Carvalho Neto
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

leitura de página da internet via Harbour

Mensagem por Daniel »

Você não pode tirar as aspas pois elas fazem parte do texto de procurar, se você olhar no arquivo de retorno tem as aspas
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
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 »

Recoloquei as aspas de novo e novamente não funcionou.

Mas acho que não é caso mesmo de colocar as aspas: o arquivo .txt está sem.

Veja:
if (!window.YAHOO || !window.YAHOO.i13n || !window.YAHOO.i13n.Rapid) { return; }
var rapidConfig = {"async_all_clicks":true,"click_timeout":300,"client_only":1,"compr_type":"deflate","keys":{"ver":"ydotcom","navtype":"server","pt":"utility","pct":"qsp","pstcat":"equities","pg_name":"summary","rvt":"PRSV11.SA","ticker":"PRSV11.SA","mrkt":"us","site":"finance","lang":"en-US","colo":"bf1","_yrid":"9488q5hgfn02u","_rid":"9488q5hgfn02u","abk":""},"pageview_on_init":true,"query_parameters":true,"test_id":"xray-finance-saliencemerge-test-3,JARVISTESTFINANCE0721-02,fd-enh-plutus-3,finance-us-web-xray-upsell-1,xray-us-finance-relatedq-test-2","tracked_mods_viewability":[],"track_right_click":true,"viewability":true,"dwell_on":true,"perf_navigationtime":2,"perf_resourcetime":1,"webworker_file":"/__rapidworker-1.2.js","spaceid":95993639};
window.rapidInstance = new window.YAHOO.i13n.Rapid(rapidConfig);
})();</script></head><body><div id="app"><div class="" data-reactroot="" data-reactid="1" data-react-checksum="585159451"><div data-reactid="2"><div
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

leitura de página da internet via Harbour

Mensagem por JoséQuintas »

Abre o html num editor de texto.
Manda procurar o texto que está colocando entre aspas.
Veja aonde vai parar.
O resultado no Harbour vai ser o mesmo do editor de texto.

Eu costumo usar [] ao invés de aspas, pra não confundir.

Código: Selecionar todos

cTexto := [tag "minhoca"]
nPos := At( cTexto, cHtml )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
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 »

Então, é isso que estou fazendo. Veja na minha última postagem parte do .txt, onde achei a primeira parte, mas a parte da cotação propriamente não acha.
Inacio de Carvalho Neto
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

leitura de página da internet via Harbour

Mensagem por ANDRIL »

Testei o prg postado pelo Daniel e esta correto. O seu código não funcionou, então o problema está na sua codificação.
Creio que esteja errando na extração dos dados, primeiro veja que esta procurando a string

Código: Selecionar todos

 nIni  := At(' data-reactid="30">',  cHtml1) + 25
Há diversas strings destas no retorno, então verifique se está selecionando a correta. Aparentemente está pegando a primeira, o resultado que deseja pode estar em outra.

Código: Selecionar todos

   cHtml:= SubStr( cHtml1, nIni)
   nFim  := At('', cHtml) - 1
Aqui está procurando NADA '' no código, então não deve achar nada retornando -1 fazendo com que a string retorne vazia.

Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder