Créer un plugin de recherche pour Mozilla/Firefox
Exemple avec le moteur de recherche exalead

Les plugins de recherche permettent un accès pratique et rapide à un certain nombre de moteurs de recherche du web. Ils peuvent être utilisés par tous les navigateurs supportant cette technologie, c'est-à-dire Mozilla, Firefox, Netscape, Beonex, ainsi que les applications Sherlock d'Apple. Nous allons, à travers ce tutoriel, créer un plugin de recherche pour exalead qui ne retournera que les pages en français.
Pré-requis pour pouvoir suivre cette documentation :

Table des matières

Préparation

Exalead est un moteur de recherche généraliste récent. Il existe une interface en français, qui offre la possibilité d'effectuer une recherche sur les pages en français. La première chose à faire est de vous rendre sur le site officiel et sur la page des plugins de recherche pour le web francophone afin de vérifier qu'un tel plugin n'existe pas déjà. Maintenant que nous avons vérifié que notre travail ne servira pas à réinventer la roue, nous nous rendons sur la page d'Exalead qui permet d'effectuer des recherches en français. Puis nous effectuons une recherche quelconque, par exemple le mot papillon. Nous relevons l'adresse URL complète qui s'affiche dans la barre des tâches. Il s'agit ici de :
http://www.exalead.fr/search/C=0MGwAMwA%3d/?U=&C=0MGwAMwA%3D&2q=&q=papillon&scope=all&htarget.x=19&htarget.y=31&htarget=Ok
Cette ligne peut se décomposer en deux parties : l'adresse d'une page, ici :
http://www.exalead.fr/search/C=0MGwAMwA%3d/
suivie de différents arguments, débutant avec le caractère ?, et séparés par le caractère &, ici :
?U=&C=0MGwAMwA%3D2q=&q=papillon&scope=all&htarget.x=19&htarget.y=31&htarget=Ok
Nous retrouvons bien notre requête, papillon, ce qui est bon signe. (Dans le cas contraire, il s'agit probablement d'une page générée par du php, et il est alors impossible de réaliser un plugin de recherche). Certains sites incluent dans cette liste de caractères un identifiant de session, qui va être différent à chaque fois que l'on effectue une recherche sur le site. Dans ce cas, il est impossible de réaliser un plugin de recherche. Pour être certains de pouvoir effectuer un plugin de recherche, nous allons copier l'URL obtenue, fermer notre navigateur, le rouvrir, et coller l'URL dans la barre d'adresse. Si nous tombons sur la même page de résultats que précédemment, nous pouvons continuer.

Nous allons maintenant commencer à écrire le code de notre plugin. Nous allons créer un fichier avec l'extension src, et avec un nom qui nous permettra de caractériser de manière la plus précise possible notre plugin. Nous créons donc maintenant le fichier exalead-fr.src, et nous allons l'éditer avec un éditeur de texte. Le fichier doit avoir une certaine structure que nous découvrirons au fur et à mesure.

Les commentaires du début de fichier

Un plugin peut (mais ce n'est pas obligatoire), commencer par quelques lignes de commentaire. Un ligne qui commence par le caractère dièse (#) est considérée comme un commentaire. On y trouve typiquement des informations telles qu'une rapide présentation du plugin, la date de création, les contacts de l'auteur, et les bugs de ce plugin. Mais vous pouvez y mettre ce que vous voulez. Nous pouvons aussi placer des commentaires n'importe où dans le fichier, pas seulement au début. Ils serviront par exemple à ajouter des fonctions qui ne seront pas activées par défaut, mais qui pourront l'être en décommentant la ligne.

Le début du plugin

Le corps du plugin commence par la ligne

<search

Nous pouvons aussi écrire

<SEARCH

si nous le souhaitons, ou même

<SeArCh

car les balises et les commandes d'un plugin de recherche sont insensibles à la casse. Évidemment, il est tout de même recommandé d'écrire, soit tout en majuscules, soit tout en minuscules, afin de pouvoir le relire, corriger une erreur, ou le mettre à jour le plus facilement possible.

version*

Le plugin doit ensuite comporter la ligne

version="7.1"

Elle n'est pas utile pour Mozilla ou Firefox, mais est elle nécessaire pour utiliser votre plugin avec Netscape. Cela correspond à la dernière version de Netscape à l'heure actuelle.

name

Nous allons ensuite écrire la ligne

name="exalead-fr"

Cela correspond au nom du plugin tel qu'il apparaîtra dans la barre de recherche du navigateur, une fois installé. Si vous souhaitez mettre dans le nom de votre plugin des caractères non ASCII, c'est-à-dire par exemple des caractères accentués ou des cédilles, vous devez encoder votre fichier en Mac-Roman.

description*

Nous écrivons maintenant la ligne

description="recherche sur exalead en francais"

Elle est utile pour les utilisateurs de Macintosh.

action

Cette commande correspond à l'adresse de la page des résultats de notre recherche. Nous l'avons déjà isolée tout à l'heure. Nous allons donc écrire :

action="http://www.exalead.fr/search/C=0MGwAMwA%3d/"

searchform*

Nous noterons ici l'adresse à partir de laquelle nous avons effectué notre recherche, soit :

searchform="http://beta.exalead.fr/search"

Cette commande est utilisée par certaines fonctionnalités de Mozilla et de Netscape (outils –> recherche sur le Web).

method

Nous écrirons systématiquement :

method="GET"

queryCharset

Parfois, le plugin de recherche ne permet pas de réaliser des recherches comprenant des caractères accentués et cette balise est nécessaire, Dans d'autres cas, elle n'est pas strictement nécessaire au fonctionnement du plugin dans Firefox, mais peut être utile pour certains outils de recherche qui ne savent pas déterminer le jeu de caractères ( par exemple l'extension ConQuery pour Firefox ). Les jeux de caractères les plus fréquent sont iso-8859-1 et UTF-8. Une fois que notre plugin sera terminé, nous n'oublierons pas de faire en test en effectuant une recherche sur un mot avec des accents, par exemple épicéa. Dans le cas d'exalead, c'est iso-8859-1 qui convient. Nous écrirons donc :

queryCharset="iso-8859-1"

Remarque

Vous pouvez tester le jeu de caractères avec l'extension ConQuery. Il faut trouver un jeu de caractères qui fonctionne à la fois avec la barre de recherche de Firefox et avec l'extension ConQuery. De manière générale, nous commencerons par essayer avec iso-8859-1 qui est le plus fréquent ; si cela ne fonctionne pas, nous essayerons avec UTF-8 et si cela ne marche toujours pas, il faudra regarder dans le code source de la page quel est le jeu de caractère utilisé.

fermer la balise

Nous allons maintenant fermer la balise search en écrivant la ligne suivante :

>

input

Nous avons réalisé la première partie du plugin. Nous allons maintenant nous occuper des paramètres.

Les arguments

Si nous reprenons notre ligne d'arguments :
?U=&C=0MGwAMwA%3D&2q=&q=papillon&scope=all&htarget.x=19&htarget.y=31&htarget=Ok
nous voyons que nous pouvons la décomposer en six arguments: U= ; C=MGwAMwA%3D ; 2q= ; q=papillon ; htarget.x=19 ; htarget.y=31 et htarget=OK. La requête que nous avons effectuée était le mot papillon. Il correspond à l'argument q=papillon

Pour chacun des arguments, sauf pour l'argument q=papillon, nous écrirons la ligne:

<input name="nom_de_l'argument" value="valeur_de_l'argument">

Cela nous donne ici:

<input name="U" value="">
<input name="C" value="MGwAMwA%3D">
<input name="2q" value="">
<input name="q" user>
<input name="htarget.x" value="19">
<input name="htarget.y" value="31">
<input name="htarget" value="OK">

Pour l'argument qui correspond à notre requête, nous avons écrit :

<input name="nom_de_l'argument" user>

ce qui donne ici :

<input name="q" user>

sourceid*

Enfin, nous écrirons

<input name="sourceid" value="Mozilla-search">

Cette balise sert à faire savoir aux webmasters qu'une recherche a été réalisée à l'aide du moteur de recherche intégré de Mozilla. L'ordre des arguments est important pour certains moteurs de recherche et il est parfois nécessaire de placer cet argument en dernier. Sauf cas particulier, nous placerons donc cet argument en dernière position dans la liste d'arguments.

La balise interpret*

Dans mozilla par exemple, lorsque les plugins de recherche sont bien codés, nous obtenons, après une recherche, les résultats de cette recherche dans la barre latérale. Pour cela, il a fallu définir dans le plugin de recherche, des motifs qui correspondaient au début et à la fin d'un résultat. Cette fonctionnalité n'est pas strictement nécessaire au fonctionnement d'un plugin de recherche, mais elle apporte des possibilités très intéressantes. Outre la séparation des résultats dans Mozilla, on peut également effectuer une recherche sur plusieurs moteurs en même temps. Les résultats sont alors ceux obtenus grâce aux balises interpret. On peut également imaginer que se développent dans un futur proche, grâce à cette technologie, des outils de recherche puissants capables par exemple de trier les résultats de plusieurs moteurs de recherche par pertinence. Si votre plugin de recherche est capable d'interpréter lui-même les résultats d'une recherche, il pourra être réutilisé directement.

BrowserResultType

Nous commençons tout d'abord par déclarer que nous allons interpréter les résultats:

<interpret
browserResultType="result"

ResultListStart et resultListEnd

Il nous faut maintenant aller regarder dans le code source de la page de résultats. Nous allons chercher un motif qui correspond au début de la recherche de résultats. Nous constatons que la partie qui correspond aux résultats proprement dits est comprise entre <span>documents 1-10 et <td class="s83" colspan="2" align="center">&copy;2004 exalead</td> Nous allons donc écrire:

resultListStart="<span>documents 1-10"
resultListEnd='<td class="s83" colspan="2" align="center">&copy;2004 exalead</td>'

Nous remarquons que le motif que nous avons choisi qui correspond à la fin de la zone de recherche contient des caractères guillemets ("). Nous devons donc l'encadrer par des apostrophes simples (').

ResultItemStart et ResultItemEnd

Maintenant que nous avons isolé la zone de résultats, nous allons isoler les résultats un par un. Un résultat correspond en fait à une balise <a href … > … </a> Les résultats qui nous intéressent ici sont les résultats principaux (par exemple de l'oeuf au papillon ou bien le tropique du papillon). Nous ne voulons pas que s'affichent les liens vers les catégories (voyages et tourisme par exemple). Nous constatons que les liens qui nous intéressent sont tous encadrés par le code <td class="d1" valign="middle"> et <span class="s22"> Nous pouvons donc écrire :

ResultItemStart='<td class="d1 valign="middle">'
ResultItemEnd='<span class="s22">'

Nous allons ensuite écrire la ligne suivante pour fermer notre balise interpret:

>

Charset

De même que pour la balise queryCharse, il peut arriver que les résultats dans la barre latérale de Mozilla n'affichent pas ou affichent mal les caractères accentués. Il vous faudra alors ajouter, à l'intérieur de la balise interpret, la commande

charset="UTF-8"

ou

charset="iso-8859-1"

pour corriger cela.

Remarques

Vous pouvez tester vos balises interpret à l'aide du navigateur Mozilla. Vous pouvez consulter de la documentation complémentaire derrière . Vous pouvez aussi vous aider de la fonction de débogage du validateur de plugin. Il est fortement conseillé d'effectuer beaucoup de tests avec différentes requêtes pour vérifier que vos motifs restent valables quelle que soit la recherche effectuée.

L'interface du moteur de recherche exalead ayant subie des modifications depuis la rédaction de ce tutoriel, il est possible que le résultat des balises interpret donné ici ne corresponde plus à la réalité. Néanmoins, la méthode exposée s'applique toujours.

finir le plugin

Notre plugin est maintenant presque terminé. Nous ajoutons la ligne

</search>

pour signifier que nous avons terminé le plugin.

La balise browser*

Il peut arriver que le plugin ait besoin d'être mis à jour, soit que le formulaire de recherche ait changé, soit que vous ayez fait un oubli dans le plugin et que vous vouliez le modifier. Vous devez donc placer un fichier.src ainsi qu'une icône dans un endroit accessible grâce au protocole http. Il vous faut définir également une fréquence de mise à jour, c'est-à-dire le nombre de jours que va attendre Firefox (ou Mozilla ou Netscape) avant de chercher si une mise à jour est nécessaire. Si vous placez le fichier src à l'adresse suivante : http://www.monsite.com/sherlock/exalead-fr.src, l'icône à l'adresse suivante : http://www.monsite.com/sherlock/exalead-fr.png et que vous voulez une fréquence de mise à jour de six jours, vous devrez écrire les lignes suivantes :

<browser
update="http://www.monsite.com/sherlock/exalead-fr.src"
updateIcon="http://www.monsite.com/sherlock/exalead-fr.png"
updateCheckDays="6"
>

Dans ce cas, tous les six jours, pour le fichier .src et pour l'icône, Firefox comparera la date de dernière modification du fichier sur le serveur avec la date de dernière modification du fichier sur le disque dur. Firefox remplacera alors le fichier du disque dur par le fichier du serveur.

Si vous voulez proposer votre plugin à Mycroft, il vous faudra alors écrire:

<browser
update="http://mycroft.mozdev.org/plugins/exalead-fr.src"
updateIcon="http://mycroft.mozdev.org/plugins/exalead-fr.png"
updateCheckDays="3"
>

l'icône

Le code du plugin est maintenant terminé. Il nous manque encore une icône associée. Si le site possède un favicon, nous pouvons par exemple le récupérer. Nous allons nous servir du service grabicon. Nous entrons l'adresse URL d'exalead, c'est-à-dire, http://beta.exalead.fr; nous choisissons un format d'image, et nous récupérons l'icône associée. Le fichier icône doit avoir le même nom que le fichier .src et doit avoir pour extension .gif, .jpg, .jpeg, ou .png. L'extension du fichier icône ne doit pas obligatoirement correspondre au type du fichier. Ainsi, vous pouvez si vous le souhaitez, avoir une icône au format png nommée exalead-fr.gif Néanmoins, il est préférable que l'extension corresponde au format du fichier. Le format png est préférable pour ce type de fichier. Si le site ne possède pas de favicon ou qu'il ne vous convient pas, vous pouvez créer une icône. Elle doit avoir une taille de 16x16 pixels.

Installer le plugin

Il est temps maintenant de soumettre votre nouveau plugin à l'épreuve du feu et de l'installer dans Firefox pour le tester et l'utiliser. La manipulation à effectuer dépend ici de votre système d'exploitation. Un plugin de recherche est constitué de deux fichiers : le fichier .src et l'icône associée. Il faut les placer dans le répertoire searchplugins du dossier d'installation de Firefox.

Attention : toutes ces manipulations sont à effectuer Firefox fermé

proposer son plugin

Si vous souhaitez faire profiter d'autres personnes de votre plugin de recherche, vous pouvez le proposer à Mycroft qui est le site officiel des plugins de recherche. Il propose actuellement plus de 3500 plugins de recherche. Vous pouvez également les proposer sur le site des plugins pour le web francophone par l'intermédiaire du formulaire. Il est fortement conseillé, avant de soumettre votre plugin, de le vérifier à l'aide du validateur de plugin

Sujets non abordés dans ce document

Ce document n'aborde pas les commandes update à l'intérieur de la balise search, celles-ci étant propres aux applications sherlock d'Apple. Il n'aborde pas certaines fonctions avancées des commandes input : inputnext et inputprev, ni de l'interprétation des résultats : BrowserResultType, bannerStart, bannerEnd, relevanceStart, relevanceEnd, skiplocal, etc. Enfin, il n'aborde pas la commande alsomatch, ni la commande queryencoding. Pour des informations complémentaires, vous pouvez lire la documentation de Mycroft

* : Cette balise ou cette commande n'est pas strictement nécessaire au fonctionnement du plugin dans Firefox ou Mozilla. Il est néanmoins préférable de l'inclure dans votre fichier.