Location: PHPKode > scripts > dBrowser > dbrowser/dAnatelPrecos.php
<?
/**
	Classe dAnatelPreços
		Autor:       Alexandre Tedeschi (d)
		E-Mail(MSN): alexandrebr#gmail.com
		ICQ#:        34715587
		Londrina/PR - Brasil
	Descrição:
		Acessa o site de comparação de preços de operadoras DDD
		da Anatel, e retorna os dados.
	Versão:
		0.8 - Classe descontinuada. O Objetivo (FixoFixo) já foi cumprido.
		Fica o convite para quem quiser terminá-la....
	Bugs:
		* Operadora sem SITE quebra o regex
		* Falta suporte p/ chamadas internacionais
		* Para chamadas telefone móvel, regex não pega SMP
	Comentários:
		Infelizmente não vai durar muito. Quando vários sistemas
		começarem a utilizar o link deles, eles colocarão uma
		imagem de bloqueio... Então teremos que escrever uma nova classe!
**/
class dAnatelPrecos{
	private $tipo;    // FF FM MF MM IN=Internacional
	private $periodo; // 1=Semana 3=Sábado 4=Domingo/Feriado
	private $hora;    // 1=00:00-00:59 até 24=23:00-23:59
	private $tabela;  // 1=Tipo1 2=Tipo2
	public  $ret;     // ["colunas"] ["linhas"]
	
	Function __construct(){
		/* Valores padrão */
		require_once("dBrowser.php");
		$this->setTabela(1);
		$this->setTipo("FF");
		$this->setPeriodo();
		$this->setHora();
		$this->setSource("Londrina",  "PR");
		$this->setTarget("São Paulo", "SP");
	}
	
	Function setTabela($t){
		$this->tabela = $t;
	}
	
	Function setTipo($tipo){
		$this->tipo = $tipo;
	}
	
	Function setSource($cidade, $uf, $cod_nacional=false, $pref=false){
		$this->source = Array(strtoupper($cidade), strtoupper($uf), $cod_nacional, $pref);
	}
	
	Function setTarget($cidade, $uf, $cod_nacional=false, $pref=false){
		$this->target = Array($cidade, $uf, $cod_nacional, $pref);
	}
	
	Function setPeriodo($p = "now"){
		if($p == "now")
			if(($x = date("w")) == 0)
				$p = 4; // Domingo
			elseif($x == 6)
				$p = 3; // Sábado
			else
				$p = 1; // Semana
		$this->periodo = $p;
	}
	
	Function setHora($h = "now"){
		if($h == "now")
			$h = date("H")+1;
		$this->hora = $h;
	}
	
	Function loadTable(){
		$br = new dBrowser;
		$br->setReferer("http://sistemas.anatel.gov.br/SIPT/Atualizacao/Tarifas_Praticadas/Cons_Tarifa_FF_FM.asp?rdbTipoChamada=$this->tipo");
		$br->browse("http://sistemas.anatel.gov.br/SIPT/Atualizacao/Tarifas_Praticadas/checalocalidade.asp");
		$br->addPostVar("aux", 3);
		$br->addPostVar("intervmedicao", "");
		$br->addPostVar("rdbTipoChamada", $this->tipo);
		$br->addPostVar("NomeLocalidadeOri", $this->source[0]);
		$br->addPostVar("UFOrigem", $this->source[1]);
		$br->addPostVar("CodNacOrigem", $this->source[2]);
		$br->addPostVar("PrefixoOrigem", $this->source[3]);
		$br->addPostVar("NomeLocalidadeDest", $this->target[0]);
		$br->addPostVar("UFDestino", $this->target[1]);
		$br->addPostVar("CodNacDestino", $this->target[2]);
		$br->addPostVar("PrefixoDestino", $this->target[3]);
		$br->addPostVar("RdbIntervMedicao", $this->periodo);
		$br->addPostVar("RdbTipoTabela", $this->tabela); // To do: implement type 2
		$br->addPostVar("SelFaixaHoraria", $this->hora);
		$br->addPostVar("CodSeqLocalidadeOri", "");
		$br->addPostVar("CodSeqLocalidadeDest", "");
		$br->addPostVar("inclui_x", 0);
		$br->addPostVar("inclui_y", 0);
		$br->load();
		$br->browse("/SIPT/Atualizacao/Tarifas_Praticadas/" . $br->ret["header"]["Location"][0]);
		$br->load();
		$this->parseBody($br->ret["body"]);
		unset($br);
	}
	
	Function parseBody($body){
		if($this->tabela == 1){
			if($this->tipo == "FF"){
				$colunas = Array("Prestadora", "Código", "Valor por minuto c/ impostos");
				$operadora = Array();
				$a = str_replace(Array("\r","\n"), "", $body);
				preg_match_all("/<font face=['\"]tahoma['\"] size=['\"]2['\"]><b>(.+?)<\/font><\/b>/", $a, $output);
				for($x = 0; $x < sizeof($output[1]); $x+=3)
					$operadora[] = Array(/*Prestadora*/trim(strip_tags(str_replace("&npsp;", "", $output[1][$x]))),
						                 /*Código    */trim(str_replace("&nbsp;", "", $output[1][$x+1])),
						                 /*Valor Min */"R\$ " . substr(trim(str_replace("&nbsp;", "", $output[1][$x+2])),2));
				$this->ret["colunas"] = $colunas;
				$this->ret["linhas"]  = $operadora;
			}
			elseif($this->tipo == "FM" || $this->tipo == "MF"){
				$colunas = Array("Prestadora", "Código", (($this->tipo == "FM")?"Prestadora Móvel":"Prestadora SMP"), "Valor por minuto c/ impostos");
				$operadora = Array();
				$a = str_replace(Array("\r","\n"), "", $body);
				preg_match_all("/<font face=['\"]tahoma['\"] size=['\"]2['\"]><b>(.+?)<\/font><\/b>/", $a, $output);
				for($x = 0; $x < sizeof($output[1]); $x+=4)
					$operadora[] = Array(/*Prestadora*/trim(strip_tags(str_replace("&npsp;", "", $output[1][$x]))),
						                 /*Código    */trim(str_replace("&nbsp;", "", $output[1][$x+1])),
						                 /*Prest. Móv*/trim(str_replace("&nbsp;", "", $output[1][$x+2])),
						                 /*Valor Min */"R\$ " . substr(trim(str_replace("&nbsp;", "", $output[1][$x+3])),2));
				$this->ret["colunas"] = $colunas;
				$this->ret["linhas"]  = $operadora;
			}
		}
		elseif($this->tabela == 2){
			$a = str_replace(Array("\r","\n"), "", $body);
			preg_match_all("/(TIM|TNL| )<font face='tahoma' size='2'><b>(.+?)<\/font><\/b><\/u>.*?&nbsp;&nbsp;&nbsp;\(&nbsp;(..)&nbsp;\)<\/font><\/b>/", $a, $output);
			
			$colunas[] = "Horário/Prestadora";
			for($x = 0; $x < sizeof($output[1]); $x++){
				if(trim($output[1][$x]))
					$colunas[] = $output[1][$x] . " (" . $output[2][$x] . ")";
				else
					$colunas[] = $output[1][$x] . " (" . $output[2][$x] . ")";
			}
			
			preg_match_all("/R\\$.*?([0-9],[0-9]{5})/", $a, $output);
			for($x = 0; $x < 24; $x++){
				$n = str_pad($x, 2, '0', STR_PAD_LEFT);
				$linha[$x] = Array();
				$linha[$x][0] = "$n:00-$n:59";
				for($y = 1; $y < sizeof($colunas); $y++)
					$linha[$x][$y] = $output[1][$x*5+$y-1];
			}
			$this->ret["colunas"] = $colunas;
			$this->ret["linhas"]  = $linha;
		}
	}
}

Return current item: dBrowser