Ajouter son propre automate de recheche à Firefox
Le 30 septembre 2008, à 13:15 par Ulhume...

La zone de recherche de FireFox est bien pratique, difficile de remettre cela en cause. Son seul problème est qu'il n'y a étrangement aucun moyen en standard pour ajouter des requêtes un peu exotiques. Voici donc comment faire.

Analyse de la requête Google

Dans le temps, il existait une extension pour faire ce qui suit, Open Search Fox, mais elle n'a pas été portée avec FireFox 3.0 et tout semble indiquer qu'elle ne le sera pas. Alors même s'il existe une autre extension du même genre ou si quelqu'un se décide à porter celle-là, autant savoir faire sans. Ceci d'autant plus que c'est assez simple.

Histoire de prendre un exemple, disons que je veuille utilisez les fonctions étendues de Google pour rechercher un projet Drupal particulier. Cela corresponds à taper dans Google site:drupal.org inurl:project webdav.

Lorsque vous avez lancé cette requête, vous obtenez avec la page de résultat, dans la barre d'adresse, quelque chose commençant par http://www.google.fr/search?q=site%3Adrupal.org+inurl%3Aproject+webdav. Oubliez le reste, cela n'a pas d'importance. Nous constatons donc que l'URL de la recherche est http://www.google.fr/search, qu'il y a un paramètre nommé q et que sa valeur est site%3Adrupal.org+inurl%3Aproject+webdav. Dans cette valeur, webdav sera par la suite à remplacer par le nom du projet que l'on va effectivement rechercher. Le début sera toujours le même.

Ajout de la requête

Pour mettre cette requête dans Firfox, il faut commencer par trouver le dossier de votre profile, généralement ~/.mozilla/firefox/XXXXX.default. Là se trouve le répertoire qui nous intéresse, searchplugins. Vous allez y créer un fichier drupal-projects.xml :

<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
  <ShortName>Drupal Projects</ShortName>
  <InputEncoding>UTF-8</InputEncoding>
  <Image width="16" height="16">http://drupal.org/misc/favicon.ico</Image>
  <Url type="text/html" method="GET" template="http://www.google.fr/search">
    <Param name="q" value="site%3Adrupal.org+inurl%3Aproject+{searchTerms}"/>
  </Url>
</SearchPlugin>
~/.mozilla/firefox/XXXXX.default/searchplugins/drupal-projects.xml

Avant de redémarrer FireFox, quelques explications s'imposent. Déjà ShortName représente comme on se l'imagine le nom qui apparaîtra dans la liste déroulante de FireFox. InputEncoding permet de passer à Google une chaînes avec les accents correctement encodés. Et enfin Image pointe sur l'URL de l'icône qui va illustrer notre requête.

La partie intéressante arrive avec Url. Il s'agit d'invoquer la méthode GET sur une URL donnée par l'attribut Template. Cela implique qu'il est parfaitement possible d'utiliser la méthode POST qui peut être nécessaire pour certain sites qui utilisent des formulaires de recherche complexes.

Ici l'URL de base de la recherche est donc http://www.google.fr/search. Maintenant, il reste encore à envoyer à Google le paramètre, q, c'est le rôle de la balise Param.

Comme nous l'avons vu plus haut, la valeur de q est composée de site%3Adrupal.org+inurl%3Aproject+, suivi du nom du projet à chercher. Ce nom est ici {searchTerms} qui indique à FireFox de placer là les mots que l'utilisateur a tapé avant de lancer la recherche. FireFox s'assure de la bonne conversion de la phrase, en convertissant, entre autre, les espaces par des +.

Et voilà, c'est tout. Redémarrez FireFox et la nouvelle recherche devrait apparaître prête à être utilisée.

Image embarquée

Ici, nous donnons l'URL de l'icône dans la balise Image, mais il est aussi possible de directement intégrer cette image au fichier XML. Pour cela il faut encoder le fichier d'origine en un fragment de texte encodé base64. Pas évident. Heureusement, il existe de petits outils en ligne comme ici, à qui l'on donne l'URL et qui nous renvoient un bloc de texte à coller directement dans le contenu de la balise Image. Dans notre cas, nous utiliserons http://drupal.org/misc/favicon.ico.

Conclusion

Cette syntaxe n'est pas une exclusivité de FireFox. En réalité ce dernier ne fait qu'exploiter le format OpenSearch qui a été conçu par A9, une filiale d'Amazon. Ce format permet non seulement d'ajouter des automates de recherche à un navigateur comme nous l'avons fait ici, mais aussi, et surtout, donne à un site la possibilité d'indiquer à un navigateur le moteur de recherche qui lui est le plus adapté. Comme pour les flux Atom ou RSS, cela se fait très simplement en incluant dans chaque page du site une balise link, comme par exemple :

<link rel="search" type="application/opensearchdescription+xml" href="http://artisan.karma-lab.net/opensearch.xml" title="Artisan Numérique" />

Du coup, lorsque le navigateur affiche cette page, il découvre cette balise et peut vous proposer d'ajouter ce nouveau moteur de recherche. Vous pouvez tester cela avec ce site. Allez dans la zone de recherche, déroulez la liste et vous devriez voir apparaître Ajouter "Artisan Numérique".

Commentaires

Roultabie , le 30 September, 2008 - 12:54

Article très intérressant, comme toujours.

Mais le "SearchForm" il sert à quoi, (je ne n'ai pas la possibilité de tester actuellement) puisque l'on envoie la requête à google?

<SearchForm>http://artisan.karma-lab.net/search</SearchForm>
Dab, le 30 September, 2008 - 13:31

Merci pour l'astuce
C'est vrai que l'intégration d'une image codée en base64 directement dans un fichier source limite le nombre des requêtes. Cela peut aussi s'utiliser dans de l'HTML avec une balise du style <img src="data:image/gif;base64,données_de_l_image_codee_en_base64">.

Ulhume, le 30 September, 2008 - 15:30

@Roultabie coquille!! je vire Smiling

Ulhume, le 30 September, 2008 - 15:34

@Dab yep, du CSS ou du JS aussi d'ailleurs. Moi je savais pas, j'ai découvert cela sur la page du gars qui a fait l'encodeur et j'avoue que ça me laisse songeur. C'est sur que ça va alourdir la page mais réduire le nombre de requêtes et donc le délai de chargement. L'autre qui qui m'ennuie est que les contenus textes sont compressés par apache, ce qui n'est pas le cas à ma connaissance de data:... Sauf s'il est possible d'enquiller les encodages.

Layer973 , le 30 September, 2008 - 15:58

Bien à savoir, mais ca fait longtemps que j'ai viré la recherche.
En effet on peut faire ce genre de chose à partie de la barre d'adresse.

Je crées un marque page:

nom:
Drupal Projects
emplacement:
http://www.google.fr/search?q=site:drupal.org inurl:project %s
mot-clé:
drup_proj

le "%s" représente la recherche

Je n'ai plus qu'à rentrer "drup_proj webdav" dans la barre d'adresse pour obtenir le même résultat.
En plus je conserve une url lisible sans les "%3A"

J'ai ainsi remplacé toutes mes recherches et gagné de la place.

plouf , le 30 September, 2008 - 16:39

Sinon il y a aussi l'extension Add to Search Bar (https://addons.mozilla.org/fr/firefox/addon/3682) qui fonctionne bien...

Ulhume, le 30 September, 2008 - 16:41

@Layer973 Ah je connaissais pas ça ! Intéressant, je croyais que cette possibilité était réservée à konq. Ceci dit, tu perds aussi du coup l'intérêt même d'OpenSearch c'est un peu dommage non ? Ce qui serait sympa c'est que Firefox permette de faire la même chose en exploitant sa liste de moteurs.

Dab, le 30 September, 2008 - 16:43

Bon certes lorsque l'on met en oeuvre un cache l'intérêt d'intégrer des images/CSS/JS au code HTML se réduit.
Pour le coup de la compression Apache, je ne suis pas certain de te suivre ... apache compresse tout ce qu'on lui donne à manger, balise comprises non ? Pour ma part ce n'est pas frontal http qui compresse mais l'application elle-même Smiling

Ulhume, le 30 September, 2008 - 16:44

@plouf Moui, alors moins j'ai d'extensions, mieux je me porte. Surtout pour un truc qui va me servir une fois tout les lunes bleues. Ceci dit, merci pour la référence même si j'avais bien dit en introduction que justement je cherchais à m'en passer Wink

Ulhume, le 30 September, 2008 - 16:47

@LOL Ah oui, j'y avais pas pensé à celle là, moi j'étais déjà en train de chercher un moyen de compresser les data url Smiling))) Ban, je vais aller goûter, je crois que ça s'impose Wink


Pour ma part ce n'est pas frontal http qui compresse mais l'application elle-même


Tu parles de catapulse ?

Ulhume, le 30 September, 2008 - 16:51

@Dab en tout cas cette histoire m'a donné une idée qui marche pas mal, re-encoder mes images à la volées dans un cache en PNG indexées. Je viens de gagner 30ko sur la home comme cela. Faudrait que je fasse la même chose avec les gravatars...

Dab, le 30 September, 2008 - 18:11

...Tu parles de catapulse ? ...
Oui quoi d'autres Wink Là je tente la mise en cache par portion de page ( en gros certains <div>) + page complète bien sûr : hmmmm prise de tête Wink
Ré-encoder les images à la volée, pas con ça (j'ajoute à TODO ). As tu vérifié si le rapport poids/temps d'éxécution est intéressant ? (avec ab ?)
Sinon quelle commande utilises tu pour réencoder tes png ? c'est en php ?

Ulhume, le 30 September, 2008 - 18:24

@Dab yep c'est en PHP (librairie GD). Le rapport ne peut être qu'intéressant vu que j'utilise un cache. Les images sont converties la première fois puis sont restockées physiquement, ensuite il n'y a plus de traitements. En gros toutes mes images passent par un get_image(chemin, taille) qui renvoie dans tous les cas un chemin depuis le cache. Du coup les icônes sont stockées en 128x128 et converties aux bonnes résolutions/encodages uniquement au premier affichage.

Pour le cache de pages, la bonne option est de se placer à la sortie de ton flux gzipé. Tu stockes le résultat en base sur la clef de l'url et tu ajoutes un timestamp de mise à jour toutes les 5 minutes disons. Cacher par portions c'est assez bordélique à gérer et cela ne peut se faire que derrière un cache global à mon sens. Il est rare que quelque chose de significatif bouge sur une page dans un intervale de 5 minutes mis à part les commentaires. Dans ce cas, tu invalides juste le cache et ça roule.

Dab, le 30 September, 2008 - 19:56

OK Merci pour ces précisions. J'ai déjà un cache pages fonctionnel mais je souhaite aller plus loin, pourquoi tout recalculer si on peut s'en passer.
Va juste falloir être stricte dans la gestion du flux.

Ulhume, le 1 October, 2008 - 15:58

@Disons que c'est pas le compliqué à mettre en oeuvre et ça fonctionne bien. Après pour les caches de second niveau c'est une autre histoire...

Roultabie , le 2 October, 2008 - 20:10

Ah! Merci!

Enfin grace à la combinaison F6 et ces marques pages, je me libère un peu plus de la souris Wink

Bonne asctuce, et me voilà à supprimer ma barre de recherche!

Layer973 , le 2 October, 2008 - 21:25

Ben c'est un prêté pour un rendu. Je ne connaissais pas F6.
Voila qui va me libérer un peu plus de ma souris. Big grin

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...