Doogle é um mecanismo de busca e rastreador da web que pode pesquisar sites e imagens indexados e, em seguida, usar palavras-chave para serem pesquisadas posteriormente.
Escrito principalmente em PHP estilo OOP com a intenção de compreender melhor o OOP e como funcionam os rastreadores da web.
Dois métodos de configuração são discutidos.
Os arquivos de configuração do Docker estão disponíveis em doogle-docker.
Presumindo que você já tenha o Docker v3.9 (ou superior) instalado e configurado.
git clone https://github.com/safesploit/doogle-docker.git
cd doogle-docker
sh build.sh
Doogle agora está acessível via localhost:8000.
Para depuração, o phpMyAdmin também foi incluído em localhost:8001.
v1.0.0-beta.1 é compatível e testado em PHP 7.4, 8.0 e 8.1.
Consulte o XAMPP para configuração do servidor web, servidor PHP e servidor MySQL. XAMPP é o método mais simples, pois são necessários vários servidores para usar o Doogle.
A configuração do MySQL no XAMPP usará PHPMyAdmin como um método GUI para configurar o banco de dados.
Uma vez logado no banco de dados via PHPMyAdmin na guia PHPMyAdmin > SQL , o conteúdo de 'doogle-tables-no-data.sql' pode ser colado no campo
mysql
pdo_mysql
Altere a senha PASSWORD_HERE usando uma senha aleatória forte.
mysql> CREATE USER IF NOT EXISTS 'doogle'@'localhost' IDENTIFIED BY 'PASSWORD_HERE';
O usuário SQL 'doogle' deve ter privilégios SELECT, INSERT e UPDATE:
mysql> GRANT SELECT, INSERT, UPDATE ON `doogle`.* TO 'doogle'@'localhost';
No arquivo config.php deve ser digitado corretamente o seguinte para configuração do seu banco de dados:
$dbname = "doogle";
$dbhost = "localhost";
$dbuser = "doogle";
$dbpass = "";
No arquivo 'doogle-tables-no-data.sql' o banco de dados será criado como 'doogle'.
No seu navegador vá até onde o arquivo está hospedado http://localhost/crawl.php
Cole o URL no campo de entrada e pressione o botão Rastrear.
Na parte inferior do crawl-manual.php a variável $startUrl é onde colar a URL do site a ser rastreado:
$startUrl = "https://thehackernews.com/";
Em seguida, no seu navegador, vá até onde o arquivo está hospedado http://localhost/crawl-manual.php
O processo de rastreamento levará algum tempo e dependerá totalmente do tamanho do site que está sendo rastreado. A página continuará a carregar (sem saída) até que o script crawl.php
termine.
Verifique as images
das tabelas e sites
no banco de dados para garantir que estejam sendo preenchidos.
Assim que as tabelas estiverem preenchidas, visite a página inicial do Doogle e pesquise! Veja imagens de visualização.
Dentro de search.php, a paginação é implementada
No exemplo acima, currentPage=11. O número de páginas a mostrar é sempre 10.
A pesquisa de sites retornará 20 resultados por página e a pesquisa de imagens retornará 30 resultados por página.
Os resultados por página podem ser alterados dentro de search.php nas linhas {83, 88} respectivamente. Conforme indicado pelas variáveis $pageSize:
Um caso extremo pode ocorrer quando não há mais páginas disponíveis.
Assim, para 331 resultados, 17 páginas estarão disponíveis. No entanto, sem considerar um cenário extremo, a IU do sistema de paginação permitirá a rolagem por páginas que não existem; que retornaria um resultado vazio.
Para lidar com um caso extremo, a seguinte lógica é implementada no loop while:
if($currentPage + $pagesLeft > $numPages + 1)
$currentPage = $numPages + 1 - $pagesLeft;
while($pagesLeft != 0 && $currentPage <= $numPages)
{ ... }
Para tornar as pesquisas de imagens mais informativas, a tag 'alt' faz parte do termo de pesquisa. Conforme mostrado em ./classes/ImageResultsProvider.php linha 34
Na tabela 'imagens', há uma linha 'quebrada' que rastreia imagens que retornam um erro.
Como as imagens já são carregadas com uma solução pura do lado do servidor, o AJAX deve ser aproveitado, carregando as imagens dinamicamente. Que é mostrado em ./assets/js/script.js
As pesquisas de imagens estão usando a biblioteca Masonry - Cascading Grid Layout.
A alvenaria permite às imagens um layout de grade que é responsivo devido ao jQuery. A imagem abaixo mostra um exemplo de layout:
Conforme mostrado nas imagens de visualização, o Doogle ao realizar uma pesquisa no site retornará (título, URL e descrição) para cada resultado.
No entanto, para facilitar a leitura de alguns resultados, é realizado um processo de recorte. Dentro de ./classes/SiteResultsProvider.php a função trimField() é chamada:
Os títulos são reduzidos em 55 caracteres e as descrições em 230 caracteres.
Ambas as tabelas 'imagens' e 'sites' no banco de dados possuem uma linha contendo 'cliques' para cada coluna.
O campo 'cliques' aumenta cada vez que um site é visitado ou uma imagem é visualizada.
Ao realizar uma pesquisa, os resultados retornados são organizados em ordem decrescente de cliques. Este comportamento é mostrado pela $query dentro da função ./classes/SiteResultsProvider.php getResultsHtml(). Veja a linha 43.
Dentro de ./classes/DomDocumentParser.php estão localizados os dados do agente do usuário usados durante o rastreamento. Conforme indicado na linha 9:
A visualização da imagem é feita usando o Fancybox.
O título, o URL da imagem e o URL do site estão disponíveis no canto inferior esquerdo.
Naturalmente, certos termos de pesquisa podem retornar muitos resultados como ‘bbc’.
Para o qual o Doogle exibe apenas 20 sites por página. Na parte inferior da página, podemos visualizar as próximas 10 páginas.
Um formulário HTML para enviar um URL para rastreamento
Demonstração do Doogle Search - YouTube