Consulta bolsa de valores direto na Bovespa com PHP

Bem pessoal estamos aqui novamente nesse post mostrando como consultar a bolsa de valores ou melhor uma avito na bolsa de valores “Bovespa” com PHP, quem acompanha “consulta” este blog já deve ter visto um post mostrando como fazer a consulta a principal diferença entre o anterior e esse, é que nessa consulta não é utilizada serviços de terceiros e sim uma consulta direto na Bovespa, no artigo anterior foi mostrado como consultar um serviço criado por mim que consultava o Infomoney, que provavelmente consultava a bolsa de valores, mas pelos comentários daquele post então resolvi mostrar como faz uma consulta direto.
Então abaixo existe uma classe bastante intuitiva para usar basta carrega a classe e invocar o método estático find pronto sua consulta já foi feita.

<?php
/** Este programa é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opnião) qualquer versão.
*
* @author Theoziran Lima<theoziran@gmail.com>
* http://blog.theoziran.com.br/2009/12/15/consulta-bolsa-de-valores-direto-na-bovespa-com-php/
*
**/
class CotacaoBovespaException extends Exception {

}
class CotacaoBovespa {
    const URL = "http://www.bmfbovespa.com.br/cotacoes2000/formCotacoesMobile.asp";

    private $_codigo;
    private $_descricao;
    private $_ibovespa;
    private $_delay;
    private $_data;
    private $_hora;
    private $_oscilacao;
    private $_ultimoValor;
    private $_quatidadeNegoc;
    private $_mercado;

    public function __get($var) {
        $var = "_".$var;
        return $this->$var;
    }

    public static function find($codigo) {
        $content = self::connect($codigo);
        if($content) {
            $xml = simplexml_load_string($content);
            if(!$xml->NUMERO_DO_ERRO) {
                $obj = new CotacaoBovespa();
                $obj->codigo = $xml->PAPEL["CODIGO"];
                $obj->descricao = $xml->PAPEL["DESCRICAO"];
                $obj->ibovespa = $xml->PAPEL["IBOVESPA"];
                $obj->delay = $xml->PAPEL["DELAY"];
                $obj->data = $xml->PAPEL["DATA"];
                $obj->hora = $xml->PAPEL["HORA"];
                $obj->oscilacao =$xml->PAPEL["OSCILACAO"];
                $obj->ultimoValor = $xml->PAPEL["VALOR_ULTIMO"];
                $obj->quantidadeNegoc = $xml->PAPEL["QUANT_NEG"];
                $obj->mercado = $xml->PAPEL["MERCADO"];
                return $obj;
            }else throw new CotacaoBovespaException("Código não encontrado");
        }else throw new CotacaoBovespaException("Não houve resposta do servidor");
    }

    private static function connect($codigo) {
        return file_get_contents(self::URL."?codsocemi=".$codigo);
    }
}

//Consulta um ativo da Petrobrás
CotacaoBovespa::find("petr4");
?>