{"word_count": 1809, "character_count": 11567}
La bibliothèque a changé de libraire. Le nouveau a été sélectionné selon de nombreux critères (conditions de livraison, mode de facturation, capacité à fournir les ouvrages attendus et réactivité des chargés de clientèle), et pas spécialement sur l'ergonomie ni l'esthétique de son site web. Quand le représentant de l'Appel du livre est venu nous en expliquer les fonctionnalités, il n'a pas caché que l'entreprise n'avait pas les moyens dont disposent certains concurrents (à l'offre orientée plutôt grand public), et qu'ils consacraient leur énergie à d'autres qualités attendues chez un libraire. En outre, a-t-il rappelé, le rôle originel d'un libraire est plutôt de vendre des livres – la veille et la sélection étant des domaines où les bibliothécaires sont déjà des professionnels aguerris. Bref, le site était maintenu fonctionnel, certaines évolutions étaient envisageables, mais il ne fallait pas trop espérer le voir dans un futur proche transformé en un clone d'un de ces sites à noms tirés de la mythologie grecque.Nous fûmes compréhensifs, et puis ça n'était pas si grave : on n'avait qu'à l'améliorer nous-mêmes.Des fonctionnalités qui manquaientLe point noir du site qui se révéla dès les premiers tests fut l'absence de rebonds. Il est possible de faire des recherches libres ou avancées, mais les notices ne proposent pas de boutons de recherche sur les titres du même auteur – ce qui est pourtant parfois pratique. Pas non plus de rebonds par collection ni par éditeur : le site n'est pas pensé pour suggérer, mais bien pour trouver le titre exact que l'on cherche.Si le site permet des recherches fines dans les commandes précédentes, il ne signale pas directement sur les notices si un ouvrage est déjà en attente de livraison. Au fil des tests, on s'aperçut également que l'ordre d'affichage des titres dans le panier d'acquisitions en cours ne permettait pas de voir d'un coup d’œil quel était le dernier ouvrage ajouté. La fonction de dédoublonnage, bien qu'opérationnelle, est dans l'ombre. L'acquéreur consciencieux, dérangé en pleine commande par un collègue (qui lui visiblement a le temps de se balader dans les bureaux pour faire la causette), cet acquéreur, donc, qui accepte (par pur esprit d'équipe) de venir boire un café, mais vite fait alors, parce qu'il a du travail, ne sait bientôt plus s'il a bien ajouté le titre affiché à l'écran dans son panier.Rien de vraiment handicapant, donc, il manquait simplement quelques petites fonctionnalités pratiques. De même, pour valider tous les paniers de commande (un par discipline), il était nécessaire de saisir pour chacun d'entre eux l'adresse de livraison, différente de l'adresse de facturation. Et la taille de caractères de la version imprimable du panier en rendait la lecture peu confortable. Des petits riens, quoi...Enfin, une fonctionnalité absente de tous les sites de libraires, nulle part n'était affichée la présence éventuelle du titre à la bibliothèque ou dans le Sudoc. Force est de reconnaître que cette information serait plus utile aux acquéreurs de Sainte-Barbe qu'aux autres clients du libraire, voire risquerait d'être ressentie par ces derniers comme parasitant la notice du livre. On comprend bien qu'ils ne la proposent pas, mais elle manque tout de même.La solution du singe ébourifféSylvain Machefert a popularisé dans le monde des bibliothèques l'extension pour Firefox  Greasemonkey, par le biais de son célèbre script Sudoc Plus. Le principe de cette extension, dont le logo lui vaut chez nous le surnom de singe ébouriffé, est de modifier l'affichage et le comportement de pages web grâce à des scripts utilisateurs. Chaque script précise à quelles pages il s'applique, et les modifications qu'il effectue (en JavaScript). Un script (disponible sur la plateforme userscripts.org) spécialement conçu pour le site de l'Appel du livre a donc été écrit.Le script commence par identifier le type de page affichée. Seules quelques pages nous intéressent : une notice de livre, un résultat de recherche, une page concernant l'adresse de livraison ou une version imprimable du contenu du panier. Pour les différencier, le script se contente de chercher des mots-clés déterminants dans l'adresse (par exemple, seule une notice aura dans son URL le terme detail?).Il récupère dans l'URL des informations qui seront utiles plus tard : l'EAN pour les pages de notices et le numéro unique de visite (attribué automatiquement). Il fouille également dans les pages de résultats de recherche au moyen d'expressions régulières ((Les expressions régulières, ou RegExp, sont des recherches de mots ou de caractères avec des troncatures et des sortes de booléens. C'est comme chercher dans un catalogue d'il y a 10 ans : ça a l'air opaque au début, mais rien de bien sorcier.)) pour identifier, dans les liens vers les notices, l'EAN de chacun des résultats.Pour les pages où l'on souhaite afficher des informations à des endroits qui ne sont pas prévus originellement pour ça, il repère de bons emplacements (comme beaucoup de sites, celui-ci utilise une mise en forme par tableaux), et les « marque » en leur attribuant un identifiant unique.Ensuite, en fonction du type de la page affichée, il lance la fonction appropriée.Pour les notices de livresUne fonction nommée isbn2PPN : celle-ci va utiliser le webservice du même nom proposé par l'Abes, qui renvoie un PPN quand on lui soumet l’ISBN d'un livre présent dans le Sudoc. La fonction teste l'EAN, et en cas d’échec calcule l’ISBN-10 et teste celui-ci. Au sortir de la fonction, deux possibilités :Le titre n'est pas dans le Sudoc (donc ni à Sainte-Barbe). On affiche donc à l'emplacement prévu cette information, sous forme de logo et de texte (on a la place, on est sur une notice).un PPN a été trouvé, on lance donc la fonction multiwhere, qui utilise le webservice éponyme de l'Abes, lequel renvoie pour un PPN donné la liste des bibliothèques qui possèdent l'ouvrage. On recherche Sainte-Barbe dans cette liste. On affiche alors le résultat de cette recherche (on l'a, ou pas), ainsi que le nombre de bibliothèques du Sudoc qui l'ont, information utile pour juger de la pertinence de l'acquisition ((Et pour savoir si c'est la honte.)).Une fonction nommée paniers : celle-ci va fabriquer l'URL d'une recherche dans les anciennes commandes pour l'EAN du livre décrit. Elle va ensuite suivre cette URL pour vérifier si cette recherche renvoie un résultat. Si c'est le cas, elle le signale par un logo et un texte ; sinon, elle ne dit rien.Une fonction nommée rebonds ((À ce stade, le programmeur démontre l'étendue de son pouvoir d'imagination quant aux noms qu'il donne aux fonctions. Enfin bon, c'est moins bien que Myosotis, mais vraiment mieux que fctnButtRbds. Ou que Debussy ou Loiret, d'ailleurs.)) : celle-ci va chercher dans la page les éventuelles mentions d'auteur, d'éditeur et de collection, fabriquer l'URL d'une recherche avancée sur le site avec chaque critère, et créer des liens sur la notice, à la place prévue à cet effet.Une fonction nommée dernierItem : celle-ci va chercher dans la page un lien vers le panier en cours. Si elle n'en trouve pas, c'est que l'on n'est pas encore connecté, ou qu'aucun panier n'est ouvert : dans tous les cas, elle s'arrête là. Si le lien est présent, elle va le suivre, et récupérer le titre de la dernière ligne de ce panier, pour l'afficher près du lien.Pour les listes de résultats de rechercheLa fonction isbn2PPN, et l'éventuelle fonction multiwhere : les présences dans le Sudoc et à Sainte-Barbe sont vérifiées pour chacun des résultats de recherche. L'information renvoyée n'est affichée que sous forme de logos, pour ne pas charger la page, aux emplacements prévus à cet effet.La fonction paniers : de la même manière, la présence dans une commande antérieure est vérifiée pour chacun des résultats, et éventuellement signalée sous forme de logo.La fonction dernierItem : si un panier est ouvert, elle affiche le dernier titre près du lien vers le panier.Pour les pages concernant l'adresse de livraisonLa fonction rempliAdresse : celle-ci se contente d'attribuer des valeurs prédéfinies aux entrées du formulaire.Pour les pages d'impression du panierLa fonction imprPanier : celle-ci modifie le style de la page, pour changer la police des caractères, leur taille, la visibilité de certaines colonnes qui n'intéressent pas l'acquéreur et prennent de la place, etc.La mise en placeUne fois opérationnel, le script a été présenté aux acquéreurs. Puis un article court sur l'Intranet a expliqué pas à pas les modalités de l'installation. C'est simple, en fait. Comme le chapitre est court, voici quelques captures d'écran pour meubler.[caption id="attachment_346" align="aligncenter" width="300"] Notice Appel du livre sans le script[/caption]&#160;[caption id="attachment_348" align="aligncenter" width="300"] Notice Appel du livre avec le script[/caption]&#160;[caption id="attachment_349" align="aligncenter" width="300"] Liste de résultats Appel du livre sans le script[/caption]&#160;[caption id="attachment_350" align="aligncenter" width="300"] Liste de résultats Appel du livre avec le script[/caption]&#160;Pour les plus férus de détails techniquesSi vous souhaitez adapter le script à votre bibliothèque (et à votre libraire), voici quelques informations supplémentaires, en vrac.Bien que JavaScript ne soit habituellement pas cross-domain (i.e un script sur une page ne permet pas d'interagir avec une page située sur un autre domaine), l'application Greasemonkey autorise à aller chercher des informations ailleurs sur le web – et donc rend possible l'utilisation des webservices Abes.Pour éviter d'aller chercher les logos sur le web (et donc de les héberger), le script les contient déjà, convertis en data URI ((Les images sont converties en données (une suite de caractères). On peut le faire en ligne très simplement, par exemple ici : http://dataurl.net/.)). C'est (un tout petit peu) plus lourd, mais rend le script autonome sur ce point.Quand on modifie un élément d'une page avec Greasemonkey, on risque parfois d'en désactiver des fonctionnalités (pour des raisons qui me sont peu claires). C'est pourquoi le script cherche des éléments ((Par les méthodes HTML DOM, décrites entre autres ici : http://www.w3schools.com/jsref/default.asp.)) de la page très restreints (et inactifs) pour en changer le contenu – telle cellule de tel tableau, par exemple.Le site de l'Appel du livre (comme beaucoup d'autres) présente un codage HTML qui n'est pas toujours très rigoureux. Ainsi, certaines balises ne sont pas fermées, et d'autres entrecroisées ou imbriquées. Cela ne pose aucun problème à Firefox, qui ferme les yeux sur ces petites erreurs, mais cela perturbe les recherches d'éléments. Celle-ci sont donc filtrées par expressions régulières. Par exemple, on cherchera tous les tableaux, puis on ne gardera que ceux contenant ce qui nous intéresse (un lien, une phrase, une image...) ET ne contenant pas la balise d'ouverture « &#60;table ».Les webservices Abes fournissent des résultats sous forme d'arbres XML, mais ces derniers sont récupérés en tant que chaînes de caractères, pour la simple raison que c'est comme ça que je sais faire, et que ça suffit largement, même si ça n'est pas le plus élégant.Le numéro de visite (ou de session) a son importance : c'est lui qui permet de rester connecté quand on utilise les nouvelles fonctionnalités.Le code est très commenté, et de manière limpide : je comprends tout ce que j'ai voulu dire. Si cependant certains éclaircissements vous feraient plaisir, n'hésitez pas à les réclamer.