Doogle est un moteur de recherche et un robot d'exploration Web qui peuvent rechercher des sites Web et des images indexés, puis utiliser des mots-clés pour effectuer une recherche ultérieure.
Écrit principalement en PHP de style POO dans le but de mieux comprendre la POO et le fonctionnement des robots d'exploration Web.
Deux méthodes de configuration sont discutées.
Les fichiers de configuration Docker sont disponibles sur doogle-docker.
En supposant que Docker v3.9 (ou version ultérieure) soit déjà installé et configuré.
git clone https://github.com/safesploit/doogle-docker.git
cd doogle-docker
sh build.sh
Doogle est désormais accessible via localhost:8000.
Pour le débogage, phpMyAdmin a également été inclus sur localhost:8001.
La v1.0.0-beta.1 est prise en charge et testée en PHP 7.4, 8.0 et 8.1.
Veuillez vous référer à XAMPP pour la configuration du serveur Web, du serveur PHP et du serveur MySQL. XAMPP est la méthode la plus simple car plusieurs serveurs sont nécessaires pour utiliser Doogle.
La configuration de MySQL sur XAMPP utilisera PHPMyAdmin comme méthode GUI de configuration de la base de données.
Une fois connecté à la base de données via PHPMyAdmin sous l'onglet PHPMyAdmin > SQL , le contenu de 'doogle-tables-no-data.sql' peut être collé dans le champ
mysql
pdo_mysql
Modifiez le mot de passe PASSWORD_HERE en utilisant un mot de passe aléatoire fort.
mysql> CREATE USER IF NOT EXISTS 'doogle'@'localhost' IDENTIFIED BY 'PASSWORD_HERE';
L'utilisateur SQL 'doogle' doit disposer des privilèges SELECT, INSERT et UPDATE :
mysql> GRANT SELECT, INSERT, UPDATE ON `doogle`.* TO 'doogle'@'localhost';
Dans le fichier config.php, les éléments suivants doivent être saisis correctement pour la configuration de votre base de données :
$dbname = "doogle";
$dbhost = "localhost";
$dbuser = "doogle";
$dbpass = "";
Dans le fichier 'doogle-tables-no-data.sql', la base de données sera créée sous le nom 'doogle'.
Dans votre navigateur, accédez à l'endroit où le fichier est hébergé http://localhost/crawl.php
Collez l'URL dans le champ de saisie et appuyez sur le bouton Explorer.
Au bas de crawl-manual.php, la variable $startUrl est l'endroit où coller l'URL du site Web à explorer :
$startUrl = "https://thehackernews.com/";
Ensuite, dans votre navigateur, accédez à l'endroit où le fichier est hébergé http://localhost/crawl-manual.php
Le processus d'exploration prendra un certain temps, cela dépendra entièrement de la taille du site Web exploré. La page continuera à se charger (sans sortie) jusqu'à la fin du script crawl.php
.
Vérifiez les images
des tables et sites
dans la base de données pour vous assurer qu'ils sont remplis.
Une fois les tableaux remplis, visitez la page d'accueil de Doogle et effectuez une recherche ! Voir les images d'aperçu.
Dans search.php, la pagination est implémentée
Dans l'exemple ci-dessus, currentPage=11. Le nombre de pages à afficher est toujours de 10.
La recherche sur site renverra 20 résultats par page et la recherche d’images renverra 30 résultats par page.
Les résultats par page peuvent être modifiés dans search.php respectivement aux lignes {83, 88}. Comme indiqué par les variables $pageSize :
Un cas limite peut se produire lorsqu’il n’y a plus de pages disponibles.
Ainsi, pour 331 résultats, 17 pages seront disponibles. Cependant, sans envisager un scénario limite, l'interface utilisateur du système de pagination permettra de faire défiler des pages qui n'existent pas ; ce qui renverrait un résultat vide.
Pour gérer un cas limite, la logique suivante est implémentée dans la boucle while :
if($currentPage + $pagesLeft > $numPages + 1)
$currentPage = $numPages + 1 - $pagesLeft;
while($pagesLeft != 0 && $currentPage <= $numPages)
{ ... }
Pour rendre les recherches d'images plus informatives, la balise « alt » fait partie du terme de recherche. Comme indiqué dans la ligne 34 de ./classes/ImageResultsProvider.php
Dans le tableau « images », il y a une ligne « cassée » qui suit les images qui renvoient une erreur.
Étant donné que les images sont déjà chargées avec une solution purement côté serveur, AJAX doit être exploité pour charger les images de manière dynamique. Ce qui est affiché dans ./assets/js/script.js
Les recherches d'images utilisent la bibliothèque de disposition de grille Masonry - Cascading.
La maçonnerie permet aux images une disposition en grille qui est réactive grâce à jQuery. L'image ci-dessous montre un exemple de mise en page :
Comme le montrent les images d'aperçu, Doogle lors d'une recherche sur le site renverra (titre, URL et description) pour chaque résultat.
Cependant, pour faciliter la lecture de certains résultats, un processus de découpage est effectué. Dans ./classes/SiteResultsProvider.php, la fonction trimField() est appelée :
Les titres sont réduits à 55 caractères et les descriptions à 230 caractères.
Les tableaux « images » et « sites » de la base de données comportent une ligne contenant des « clics » pour chaque colonne.
Le champ « clics » augmente chaque fois qu'un site est visité ou qu'une image est prévisualisée.
Lors d'une recherche, les résultats renvoyés sont organisés par ordre décroissant de clics. Ce comportement est montré par la $query dans la fonction ./classes/SiteResultsProvider.php getResultsHtml(). Voir ligne 43.
À l'intérieur de ./classes/DomDocumentParser.php se trouvent les données de l'agent utilisateur utilisées lors de l'exploration. Comme indiqué à la ligne 9 :
L'aperçu de l'image se fait à l'aide de Fancybox.
Le titre, l'URL de l'image et l'URL du site sont disponibles dans le coin inférieur gauche.
Naturellement, certains termes de recherche peuvent renvoyer de nombreux résultats comme « bbc ».
auquel Doogle n'affiche que 20 sites par page. En bas de page, nous pouvons visualiser les 10 pages suivantes.
Un formulaire HTML pour soumettre une URL à explorer
Démo de Google Search - YouTube