public function testGetMarcas() { $tabelas = FipeGratis::getTabelas(FipeGratis::CARRO); $codigoTabela = $tabelas[0]['codigo']; $marcas = FipeGratis::getMarcas(FipeGratis::CARRO, $codigoTabela); $codigoMarca = $marcas[0]['codigo']; $modelos = FipeGratis::getModelos(FipeGratis::CARRO, $codigoTabela, $codigoMarca); $codigoModelo = $modelos[0]['codigo']; $anos = FipeGratis::getAnos(FipeGratis::CARRO, $codigoTabela, $codigoMarca, $codigoModelo); $codigoAno = $anos[0]['codigo']; $precoMedio = FipeGratis::getPrecoMedio(FipeGratis::CARRO, $codigoTabela, $codigoMarca, $codigoModelo, $codigoAno); $this->assertEquals(count($tabelas) > 0, true); $this->assertEquals(count($marcas) > 0, true); $this->assertEquals(count($modelos) > 0, true); $this->assertEquals(count($anos) > 0, true); $this->assertEquals(is_float($precoMedio), true); }
/** * Metodo para buscar os anos existentes de acordo com o tipo, tabela, marca e modelo informado * * @param string $tipo * @param int $codMarca * @param int $codModelo * @throws Exception * @return array */ public static function getAnos($tipo = null, $tabelaReferencia = null, $codMarca = null, $codModelo = null) { if (is_null(FipeGratis::$__MODELO_ANOS) || is_null(FipeGratis::$__codModelo) || FipeGratis::$__codModelo != $codModelo) { FipeGratis::$__codModelo = $codModelo; /* * Verificando se exite $codModelo */ $validate = array_filter(FipeGratis::getModelos($tipo, $tabelaReferencia, $codMarca), function ($tables) use($codModelo) { return $tables['codigo'] == $codModelo; }); if (empty($validate)) { throw new Exception("O modelo {$codModelo} não existe"); } /* * Montando parametros */ $paramters = array('ScriptManager1' => 'updModelo|ddlModelo', '__ASYNCPOST' => true, '__EVENTTARGET' => 'ddlModelo', '__LASTFOCUS' => '', '__EVENTARGUMENT' => FipeGratis::$__PARAM_EVENTARGUMENT, '__VIEWSTATE' => FipeGratis::$__PARAM_VIEWSTATE, '__VIEWSTATEGENERATOR' => FipeGratis::$__PARAM_VIEWSTATEGENERATOR, '__EVENTVALIDATION' => FipeGratis::$__PARAM_EVENTVALIDATION, 'ddlAnoValor' => 0, 'ddlMarca' => $codMarca, 'ddlModelo' => $codModelo, 'ddlTabelaReferencia' => $tabelaReferencia, 'txtCodFipe' => ''); /* * Consultando anos */ $ch = curl_init("http://www.fipe.org.br/web/indices/veiculos/default.aspx?azxp=1&{$tipo}"); $options = array(CURLOPT_COOKIEJAR => 'cookiejar', CURLOPT_HTTPHEADER => array("User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding: gzip, deflate", "Referer: http://www.fipe.org.br/web/indices/veiculos/default.aspx?azxp=1&{$tipo}", "Cookie: " . FipeGratis::$__COOKIE . "", "Host: www.fipe.org.br", "Connection: keep-alive", "X-MicrosoftAjax: Delta=true"), CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => http_build_query($paramters), CURLOPT_FOLLOWLOCATION => 1); curl_setopt_array($ch, $options); $html = curl_exec($ch); curl_close($ch); $explode = explode('|', $html); $key = array_search('__EVENTARGUMENT', $explode); FipeGratis::$__PARAM_EVENTARGUMENT = $explode[$key + 1]; $key = array_search('__VIEWSTATE', $explode); FipeGratis::$__PARAM_VIEWSTATE = $explode[$key + 1]; $key = array_search('__VIEWSTATEGENERATOR', $explode); FipeGratis::$__PARAM_VIEWSTATEGENERATOR = $explode[$key + 1]; $key = array_search('__EVENTVALIDATION', $explode); FipeGratis::$__PARAM_EVENTVALIDATION = $explode[$key + 1]; $crawler = new Crawler($html); $options = $crawler->filter('#ddlAnoValor > option'); FipeGratis::$__MODELO_ANOS = array(); foreach ($options as $node) { if ($node->getAttribute('value') != '0') { FipeGratis::$__MODELO_ANOS[] = array('codigo' => $node->getAttribute('value'), 'ano' => $node->nodeValue); } } } return FipeGratis::$__MODELO_ANOS; }