public function iniciar($busca, $limite, $categoria) { $contador = 0; //Tratamento do termo de busca $busca = self::retirarAcentos($busca); $this->log = new \Log(self::LOG_FILE); $this->log->registrar("Iniciando..."); $this->client = new Client(); self::$URL = "http://www.americanas.com.br"; $this->adicionaLink(empty($categoria) ? "http://www.americanas.com.br" : $categoria); $resultados = array(); while ($this->getTotalLinksPendentes()) { try { $link = $this->getProximoLinkPendente(); $this->log->registrar("Abrindo: {$link}"); $crawler = $this->client->request('GET', $link); if (!$crawler) { //Pula para a próxima $this->log->registrar("Link não aberto: {$Link}"); continue; } $this->linksProcessados[] = $link; if ($totalLinks = $this->procurarLinks($crawler)) { $this->log->registrar("Links encontrados: {$totalLinks}"); } try { $titulo = trim($crawler->filter('.mp-tit-name')->text()); $valorDe = trim($crawler->filter('.mp-pb-from')->text()); $valorAte = trim($crawler->filter('.mp-pb-to')->text()); $imagens = $crawler->filter('.sz')->each(function ($node) { return $node->attr("src"); }); if (isset($titulo) and isset($valorDe) and isset($valorAte) and strripos(self::retirarAcentos($titulo), $busca) !== false) { $resultados[] = array("titulo" => $titulo, "de" => $valorDe, "por" => $valorAte, "link" => $link, "imagens" => $imagens); $contador++; if ($contador == $limite) { return $resultados; } } } catch (Exception $e) { $this->log->registrar($e->getMessage()); } $this->log->registrar("Status da fila: " . $this->getTotalLinksPendentes()); } catch (Exception $e) { $this->log->registrar("Erro : " . $e->getMessage()); } } }
<?php require_once "vendor/autoload.php"; $exemplo3 = new \Exemplo3(); //$_GET['busca'] = "Arvore"; //$_GET['limite'] = 1; if (isset($_GET['busca']) and isset($_GET['limite']) and isset($_GET['categoria'])) { $busca = $_GET['busca']; $limite = $_GET['limite']; $categoria = $_GET['categoria']; $resultados = $exemplo3->iniciar($busca, $limite, $categoria); } $categorias = array('http://www.americanas.com.br/linha/350392/celulares-e-telefones/smartphone' => 'Smartphones', 'http://www.americanas.com.br/linha/267868/informatica/notebook' => 'Notebooks', 'http://www.americanas.com.br/linha/339090/informatica/impressora' => 'Impressoras', 'http://www.americanas.com.br/linha/262909/tv-e-home-theater/tv' => 'TVs', 'http://www.americanas.com.br/loja/256408/audio' => 'Áudio', 'http://www.americanas.com.br/loja/228310/livros' => 'Livros'); include "views/exemplo3.php";