Doogle es un motor de búsqueda y un rastreador web que puede buscar imágenes y sitios web indexados y luego utilizar palabras clave para buscar más tarde.
Escrito principalmente en PHP estilo programación orientada a objetos con la intención de comprender mejor la programación orientada a objetos y cómo funcionan los rastreadores web.
Se analizan dos métodos de configuración.
Los archivos de configuración de Docker están disponibles en doogle-docker.
Suponiendo que ya tiene Docker v3.9 (o superior) instalado y configurado.
git clone https://github.com/safesploit/doogle-docker.git
cd doogle-docker
sh build.sh
Ahora se puede acceder a Doogle a través de localhost:8000.
Para la depuración, phpMyAdmin también se ha incluido en localhost:8001.
v1.0.0-beta.1 es compatible y probado en PHP 7.4, 8.0 y 8.1.
Consulte XAMPP para conocer la configuración del servidor web, el servidor PHP y el servidor MySQL. XAMPP es el método más sencillo ya que se requieren varios servidores para utilizar Doogle.
La configuración de MySQL en XAMPP utilizará PHPMyAdmin como método GUI para configurar la base de datos.
Una vez que haya iniciado sesión en la base de datos a través de PHPMyAdmin en la pestaña PHPMyAdmin > SQL , el contenido de 'doogle-tables-no-data.sql' se puede pegar en el campo
mysql
pdo_mysql
Modifique la contraseña PASSWORD_HERE utilizando una contraseña aleatoria segura.
mysql> CREATE USER IF NOT EXISTS 'doogle'@'localhost' IDENTIFIED BY 'PASSWORD_HERE';
El usuario de SQL 'doogle' debe tener privilegios SELECCIONAR, INSERTAR y ACTUALIZAR:
mysql> GRANT SELECT, INSERT, UPDATE ON `doogle`.* TO 'doogle'@'localhost';
En el archivo config.php se debe ingresar correctamente lo siguiente para la configuración de su base de datos:
$dbname = "doogle";
$dbhost = "localhost";
$dbuser = "doogle";
$dbpass = "";
En el archivo 'doogle-tables-no-data.sql' la base de datos se creará como 'doogle'.
En su navegador vaya a donde está alojado el archivo http://localhost/crawl.php
Pegue la URL en el campo de entrada y presione el botón Rastrear.
En la parte inferior de crawl-manual.php, la variable $startUrl es donde pegar la URL del sitio web que se va a rastrear:
$startUrl = "https://thehackernews.com/";
Luego en su navegador vaya a donde está alojado el archivo http://localhost/crawl-manual.php
El proceso de rastreo llevará algún tiempo y dependerá completamente del tamaño del sitio web que se esté rastreando. La página continuará cargándose (sin resultados) hasta que finalice el script crawl.php
.
Verifique las images
de las tablas y sites
en la base de datos para asegurarse de que estén completos.
Una vez que las tablas estén completas, visite la página de inicio de Doogle y busque. Ver imágenes de vista previa.
Dentro de search.php, se implementa la paginación
En el ejemplo anterior, páginaactual=11. El número de páginas a mostrar es siempre 10.
La búsqueda del sitio arrojará 20 resultados por página y la búsqueda de imágenes arrojará 30 resultados por página.
Los resultados por página se pueden cambiar dentro de search.php en las líneas {83, 88} respectivamente. Como lo indican las variables $pageSize:
Puede ocurrir un caso límite cuando no hay más páginas disponibles.
Entonces, para 331 resultados, estarán disponibles 17 páginas . Sin embargo, sin considerar un escenario de caso límite, la interfaz de usuario del sistema de paginación permitirá desplazarse por páginas que no existen; lo que devolvería un resultado vacío.
Para manejar un caso extremo, se implementa la siguiente lógica en el bucle while:
if($currentPage + $pagesLeft > $numPages + 1)
$currentPage = $numPages + 1 - $pagesLeft;
while($pagesLeft != 0 && $currentPage <= $numPages)
{ ... }
Para que las búsquedas de imágenes sean más informativas, la etiqueta "alt" forma parte del término de búsqueda. Como se muestra en ./classes/ImageResultsProvider.php línea 34
En la tabla 'imágenes', hay una fila 'rota' que rastrea las imágenes que devuelven un error.
Debido a que las imágenes ya se cargan con una solución pura del lado del servidor, se debe aprovechar AJAX, cargando imágenes dinámicamente. Que se muestra en ./assets/js/script.js
Las búsquedas de imágenes utilizan Masonry: biblioteca de diseño de cuadrícula en cascada.
Masonry permite que las imágenes tengan un diseño de cuadrícula que responde gracias a jQuery. La siguiente imagen muestra un diseño de ejemplo:
Como se muestra en las imágenes de vista previa, Doogle al realizar una búsqueda en el sitio devolverá (título, URL y descripción) para cada resultado.
Sin embargo, para que algunos resultados sean más fáciles de leer, se realiza un proceso de recorte. Dentro de ./classes/SiteResultsProvider.php se llama a la función trimField():
Los títulos se recortan a 55 caracteres y las descripciones se recortan a 230 caracteres.
Tanto las tablas de "imágenes" como las de "sitios" de la base de datos tienen una fila que contiene "clics" para cada columna.
El campo 'clics' aumenta cada vez que se visita un sitio o se obtiene una vista previa de una imagen.
Al realizar una búsqueda, los resultados obtenidos se organizan en orden descendente de clics. Este comportamiento se muestra mediante la función $query dentro de ./classes/SiteResultsProvider.php getResultsHtml(). Ver línea 43.
Dentro de ./classes/DomDocumentParser.php se encuentran los datos del agente de usuario utilizados durante el rastreo. Como se indica en la línea 9:
La vista previa de la imagen se realiza utilizando Fancybox.
El título, la URL de la imagen y la URL del sitio están disponibles en la esquina inferior izquierda.
Naturalmente, ciertos términos de búsqueda pueden arrojar muchos resultados como "bbc".
A lo cual Doogle sólo muestra 20 sitios por página. En la parte inferior de la página, podemos ver las siguientes 10 páginas.
Un formulario HTML para enviar una URL para rastreo
Demostración de búsqueda de Google - YouTube