J'ai créé mon propre métamoteur de recherche

Posté le 21 août 2025 - Concentré du Web - Par Grafikart - Proposer une correction

Aujourd'hui je vous propose de parler du moteur de recherche que vous me voyez utiliser dans certaines de mes vidéo. Les plus attentifs d'entre-vous auront remarqué un détail particulier : le nom de domaine localhost. En effet, le moteur de recherche que j'utilise n'existe pas en ligne mais est est un petit serveur web qui tourne en local et qui agit comme un métamoteur de recherche.

Pourquoi ?

Pourquoi s’embêter à créer une page de recherche maison alors qu’il en existe des dizaines déjà très performants ?

À la base, l’idée venait d’une simple vidéo que je voulais faire sur les moteurs de recherche alternatifs. Je voulais comparer les résultats de Google, DuckDuckGo, Qwant, etc. pour vois si il y avait une réelle différence dans la qualité des résultat. Pour cela l'objectif était de mélanger les réponses et de voir sur quel moteur je cliquais le plus souvent. Finalement, cette vidéo n’a jamais vu le jour, mais l'ergonomie m'a séduit et j'ai continué à itérer dessus.

Ce que j'aime chez les autres.

Une autre motivation, plus universelle chez les développeurs : le besoin de personnalisation. Aucun moteur de recherche ne propose exactement la combinaison de fonctionnalités que je voulais :

  • Un fond d'écran différent chaque jour comme chez Bing (
  • La personnalisation des thèmes de DuckDuckGo, pratique pour harmoniser le moteur avec l'interface de son système.
  • Les bangs (!), qui permettent d’envoyer une recherche directement sur un site tiers (IMDB, GitHub, StackOverflow, etc.).
  • Le filtrage façon Brave Search, mais simplifié : pouvoir bloquer certains sites “poubelles” ou intrusifs.
  • Et surtout, un rendu clair et simple : pas de modules parasites, pas de FAQ, pas de modules "intelligents" en plein milieu… juste du texte.
  • Un chargement rapide (certains moteurs de recherche mettent souvent plus de 500ms à répondre à cause de leur localisation)

Vu qu'aucun moteur ne regroupe tous ces points, il ne reste que la possibilitée de le construire à la main.

Mon implémentation

Mon moteur de recherche est donc un serveur web qui fonctionne en local et qui démarre avec mon système. Ce qui offre une rapidité d'affichage inégalable.

Lors d'une recherche le front-end va appeler une API local qui va interroger plusieurs moteurs de recherche pour récupérer les résultats qui seront affichés sous forme de liste sur 2 colonnes.

Le fond d'écran du moteur est chargé une fois par jour mais peut être remplacé si besoin (au cas où il ne me convient pas).

Les bangs personnalisés

J'ai aussi implémenté quelques bangs pour effectuer des recherches plus rapidement. Ces bangs sont aussi transmis au front-end pour éviter l'aller retour avec le serveur (vu que ce sont de simples redirections dans la plupart des cas).

Certains bangs spéciaux affectent l'interface comme le bang !t qui me permet d'initier un timer persistant.

Système de blocklist

J'ai aussi un système de blocklist qui me permet de bloquer certains noms de domaines, soit parce que ce sont des fermes à contenu, soit parce que ce sont des sites sur lesquels on ne peut pas rentrer (qui demandent un abonnement par exemple) et qui du coup ne peuvent pas être exploré.

Comment ça marche ?

Côté technique, j’ai choisi d'utiliser le langage Golang pour plusieurs raisons :

  • Pouvoir générer un exécutable léger (< 8Mo) et cross-platform (Windows, Mac, Linux).
  • Limiter les dépendances : le serveur web intégré de Go suffit largement.
  • Une envie de pratiquer Go avec un projet concret.

Pour la partie visuelle, j’ai utilisé Preact (une alternative légère à React) et du CSS classique. Le front communique avec Go via des appels API qui déclenchent les scrapers qui vont extraire les données de la page de résultat à l'aide de la librairie goquery.

Enfin, pour que le moteur soit toujours disponible, j’ai mis en place un petit système de service qui démarre automatiquement avec l’OS :

  • Sur Linux, via systemd.
  • Sur Mac, via les fichiers plist.
  • Sur Windows, en ajoutant simplement l’exécutable dans les applications au démarrage.

Et pour l’intégrer dans mon navigateur, j’ai ajouté un moteur de recherche personnalisé pointant vers localhost:8042.

Conclusion

Au final, ce projet m’a permis d’explorer plus en profondeur Go et d’en tirer un petit boilerplate réutilisable. Mais surtout, il illustre bien ce que j’aime dans le fait d'être développeur : pouvoir utiliser nos compétences pour créer des solutions adaptées à nos besoins ou ceux des autres.