php error to get data from a particular area of a site

Asked

Viewed 63 times

1

Good evening I have a code in php to get the data of a given page, I use the initial template and it works I’m trying to use it in another site like this ai in the template but gives an error:

E_NOTICE : type 8 -- Undefined offset: 3 -- at line 68

E_NOTICE : type 8 -- Undefined offset: 2 -- at line 68

E_NOTICE : type 8 -- Undefined offset: 1 -- at line 68

E_NOTICE : type 8 -- Undefined offset: 0 -- at line 68

Below is the code I have no idea how to solve, thank you.

<?php class cotacoes { public function pegaValores() {

    if(!$fp=fopen("http://www.valor.com.br/valor-data/moedas" ,"r" )) { 
        echo "Erro ao abrir a página de cotação" ; 
        return(0);
    } 

    //variáveis de classe
    $arrayValores = array();

    //inicio do processamento - ler página
    $uolHTML = "";
    while(!feof($fp)) { // leia o conteúdo da página, uma linha por vez, armazene na variável uolHTML
        $uolHTML .= fgets($fp); 
    }
    fclose($fp);

    //array contendo as expressoes regulares que indicam cada moeda
    $patterns = array(
        "dolarComercial" => "/table-data valor_tabela.*Dólar Comercial/",
        "dolarTurismo"   => "/table-data valor_tabela.*Dólar Turismo/"
        
    );


    $uolHTML = preg_replace("/id=.block-valor_data_blocks-dolar-euro-full./", "", $uolHTML); 
    $uolHTML = preg_replace("/<tr>/", "\n<tr>", $uolHTML); //acrescentar quebra de linha
    $uolHTML = preg_replace("/<td>/", "\n<td>", $uolHTML); //acrescentar quebra de linha


    //loop para cada moeda
    while( list($moeda, $pattern) = each($patterns) ) {

        $arrayHTML = explode("\n", $uolHTML);

        //loop por cada linha da pagina HTML
        while ( list($indice, $linha) = each($arrayHTML) ) {

            //se bloco HTML casa com a pattern da moeda do looping atual...
            if (preg_match($pattern, $linha)) {

                //print "Encontrei '$pattern' em: $linha\n\n";

                //ler proxima linha
                $linha = $arrayHTML[++$indice]; 

                //pegar cotacao compra
                preg_match("/<td>(.*)<\/td>/", $linha, $valor);
                $compra = substr($valor[1],0,4);

                //ler proxima linha
                $linha = $arrayHTML[++$indice]; 

                //pegar cotacao venda
                preg_match("/<td>(.*)<\/td>/", $linha, $valor);
                $venda = substr($valor[1],0,4);

                //atribuindo valores ao array de retorno
                array_push($arrayValores, $compra, $venda);
            }

        } // fim while

    } // fim while

    return($arrayValores);

} } $uol = new cotacoes(); list($dolarComercialCompra, $dolarComercialVenda, $dolarTurismoCompra, $dolarTurismoVenda) = $uol->pegaValores(); print ($dolarComercialCompra); ?> 

The line with the error in question would be the

list($dolarComercialCompra, $dolarComercialVenda, $dolarTurismoCompra, $dolarTurismoVenda) = $Uol->pegaValores();

If anyone knows anything

  • Solved your doubt?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.