1. Sylvain Machefert Mai 2010
Présentation du projet Sudoc+
script greasemonkey d'enrichissement du Sudoc
Introduction
Ce document présente le fonctionnement du script Sudoc+ dont le but est
d'enrichir l'interface web du sudoc1.
Ce script est basé sur l'extension Greasemonkey (GM) disponible sur le
navigateur web Mozilla Firefox2. Cette extension permet de modifier une page
web en exécutant des scripts dédiés lors du chargement des pages, du côté
client.
Il existe plusieurs dizaines de milliers 3 de scripts dédiés permettant de : remplir
automatiquement des formulaires, modifier l'apparence d'une page web, filtrer
l'affichage de certains éléménts ...
Sudoc+ est l'un de ces modules et propose d'ajouter à l'interface Web les
fonctionnalités suivantes :
– Intégration de fils RSS
– Suggestions orthographiques pour les recherches sans résultats
– Géolocalisation des exemplaires disponibles
– Permalien sur les notices
– Affichage dès la notice bibliographique de la disponibilité dans une
sélection personnalisée de bibliothèques
Ce script a été développé à titre expérimental afin de mieux comprendre la
structuration du Sudoc et afin de découvrir le développement de modules GM.
Il est par conséquent totalement perfectible car développé avec un recul limité
sur les technologies qu'il utilise.
L'exécution de ce script s'effectue principalement sur le poste client mais
certaines opérations nécessitant des traitements plus compliqués sont
déléguées à des scripts php hébergés sur le serveur geobib.fr. On parlera
dans la suite de ce documents de scripts côté serveur pour ce qui est éxecuté
sur ce serveur.
Organisation
Afin de faciliter la diffusion et la configuration de ce script, une page web a été
mise en place à l'adresse http://www.geobib.fr/sudoc.
1 http://www.sudoc.abes.fr
2 Il est possible d'utiliser cette technique sur d'autres navigateurs moyennant quelques
adaptations qui n'ont pas été réalisées pour le moment.
3 http://userscripts.org/
2. Cette page propose deux sections :
– installation :
– de l'extension greasemonkey, qui est le socle commun sur lequel on
va pouvoir ajouter les modules dédiés aux sites web que l'on souhaite
enrichir (renvoi vers le site officiel des extensions Firefox).
– du script Sudoc+ (sudoc_plus.user.js), qui vient se greffer sur GM pour
permettre d'ajouter des fonctionnalités au catalogue web du sudoc (ce
script est diffusé par l'intermédiaire de l'espace officiel de partage de
scripts GM : http://userscripts.org4)
– configuration : permet de sélectionner les bibliothèques pour lesquels
on souhaite connaître la disponibilité dès la notice bibliographique et les
options que l'on souhaite activer.
Le script
Le script GM est un script javascript qui suit un standard développé par les
équipes développant l'extension firefox et qui permet de définir certains
éléments de configuration dans l'en-tête.
// ==UserScript==
// @name Sudoc plus
// @author Sylvain Machefert (@symac)
// @namespace http://geobib.fr
// @description Script d'enrichissement du catalogue sudoc (suggestions
orthographiques, recherche de localisations automatisée ...)
// @include http://www.sudoc.abes.fr/*
// @include http://corail.sudoc.abes.fr/*
// @require http://www.geobib.fr/sudoc/js/jquery.tools.min.js
// ==/UserScript==
Les éléments les plus importants de cette section sont les commandes
@include qui permettent de définir les domaines sur lesquels ce script sera
exécuté par GM. On a ici les deux urls par lesquelles on peut accéder au sudoc.
Il est aussi possible de définir à l'aide d'une commande @require l'intégration
d'une bibliothèque javascript, et le choix a été fait ici d'utiliser la librairie
jquery. Cette librairie sera téléchargée une fois seulement, au moment de
l'installation du script. Il sera alors possible dans le script Sudoc+ de faire appel
aux fonctionnalités de cette librairie qui permet de faciliter de nombreuses
opérations javascript.
Configuration du script
Afin de permettre une personnalisation maximale toutes les options sont
configurables à travers une interface web.
Un cookie geobib.fr
Pour cela on a met en place un cookie au niveau de la machine cliente, associé
au domaine www.geobib.fr. Pour des questions de sécurité il n'est en effet pas
possible de créer un cookie associé au domaine www.sudoc.abes.fr. Au
4 http://userscripts.org/scripts/show/60741
3. moment de l'exécution du script GM par le poste client, celui-ci va donc faire un
appel ajax à une page web sur le domaine geobib.fr. Ce script étant sur le
même domaine que le cookie, il pourra avoir accès à ce dernier, et le
retournera dans un format lisible par le script GM (tableau Json).
Ce tableau permettra au script GM de connaître :
– La liste des bibliothèques préselectionnées
– Les fonctions activées (affichage des couvertures, des
recommandations ...)
L'interface de configuration
L'interface permet de sélectionner les bibliothèques à partir de leurs intitulés.
Le cookie stockera alors les libellés des bibliothèques mais aussi leurs numéros
RCR. Cette interface est réalisée en PHP et plusieurs fonctions javascript
permettent de faciliter les mises à jour sans recharger la page (déplacement
dynamique des bibliothèques entre sélection / hors sélection, suggestion de
bibliothèques en cours de frappe ...).
Les bibliothèques proposée sont issues d'un fichier Excel récupéré sur le site de
l'ABES et qui fournit une correspondance entre numéro RCR et libellé 5. Ce
fichier a été transformé en fichier CSV pour faciliter sa lecture par le script PHP
listeBibs.php. Ce script est appellée au cours de la frappe par une fonction Ajax
qui passe la requête que l'utilisateur est en train de saisir. En retour
listeBibs.php renvoie au format Json la liste des bibliothèques qui
correspondent.
L'interface permet aussi d'activer / désactiver les autres options, chacune
entraînant l'initialisation des valeurs du cookie à 0 (désactivé) ou 1 (activé).
Gestion des disponibilités
La gestion des disponibilités depuis la notice bibliographique est faite
principalement côté serveur. On passe à un script getDispos.php le ppn qui
nous intéresse. Ce dernier va alors récupérer la page des localisations et la
mettre en relation avec la liste des bibliothèques que l'on a préselectionnées. Il
va alors renvoyer au script GM la préselection avec pour chaque site
l'indication de la disponibilité du document.
On charge alors dans un tooltip cette liste et pour chaque site possédant le
document, on ajoute un lien " + d'infos". Une fonction javascript onclick
présente sur ce lien entraîne un nouvel appel au script getDispos.php. On
passe alors en plus du PPN de la notice le RCR du site qui nous intéresse. On
ajoute dynamiquement dans le tooltip les informations détaillées (disponibilité
pour le PEB, cote ...). Pour une illustration du fonctionnement, voir l'annexe 5.
Géolocalisation
Afin de faciliter la localisation des exemplaires, une page web a été mise en
place qui à partir d'un numéro PPN passé en paramètre affiche une carte de
France avec un marqueur par bibliothèque possédant un exemplaire du
5 http://www.abes.fr/abes/documents/recherche/RCR-Intitule_abrege.xls
4. document (cf. Annexe 4).
Cet affichage des marqueurs implique de connaître la localisation précise des
bibliothèques. Le fichier des RCR récupéré auprès de l'Abes contenant plus de
3000 sites il n'est pas envisageable de rechercher leurs coordonnées un à un.
Pour répondre à ce besoin nous avons donc utiliser un service de Google qui à
partir d'une adresse postable va retourner les coordonnées géographiques du
lieu. Ce service étant limité à un certain nombre de requêtes par jour et
demandant un certain temps, les coordonnées ne sont demandées qu'une fois
à Google et sont alors stockées dans une table de base de données sur le
serveur geobib.
Les adresses des bibliothèques sont récupérées depuis la base de description
des bibliothèques proposée par l'ABES. Le champ adresse postale est nettoyé
d'un certain nombre d'informations qui perturbent le service de Google (boite
postale, case courrier ...). Le taux de retour de Google est de plus de 90 % mais
certaines erreurs subsistent. L'idéal pour ce service serait donc que les fiches
descriptives des bibliothèques intègrent directement les coordonnées
géographiques signalées par les établissements eux-même. On arrive
néanmoins avec ce système et sans investissement particulier à un niveau de
service correct.
Un utilisateur qui consulte une notice avec le script GM activé verra donc un
lien supplémentaire apparaître qui lui proposera de voir les exemplaires
disponibles sur une carte. Ce lien le renverra sur le script geobib.fr/carte.php
auquel sera passé en paramètre le PPN de la notice qui nous intéresse. Le
script carte.php récupèrera alors la page des localisations sur le site du sudoc
(via une commande curl) et l'analysera pour récupérer la liste des
établissements (en fait leurs numéros RCR) qui possèdent le document.
Les coordonnées de ces établissements seront alors récupérées (via le service
Google maps si c'est la première fois que l'on cherche à afficher un exemplaire
de ce site ou dans la base geobib.fr si on connaît déjà les coordonnées) et un
marqueur sera ajouté sur la carte pour chacun des sites.
Si l'on clique sur un des marqueurs on relancera alors la récupération de la
page des localisations en lui passant en argument le PPN et le RCR du site que
l'on souhaite. On ajoutera alors dynamiquement dans l'infobulle sur la carte les
informations détaillées pour l'exemplaire (disponibilité pour le PEB, cote ...).
Suggestion orthographiques
Les suggestions orthographiques sont récupérées directement depuis le poste
client. Si l'on se retrouve sur une liste de réponses contenant zéro résultats, on
va récupérer via une commande $.get en jquery le contenu de la page que
fournit Google pour la même requête. On va alors parser cette page pour
récupérer la zone que Google utilise pour nous suggérer une autre équation de
recherche.
Si l'on trouve cette zone on va alors l'afficher chez l'usager dans la barre d'en-
tête (cf. Annexe 1).
5. Affichage des couvertures
Le sudoc affiche déjà les couvertures issues du projet Google Books. Afin
d'améliorer le taux de notices illustrées, le script GM ajoute la récupération des
notices depuis le web service d'Amazon.
Afin d'améliorer la présentation des notices, on va dans tous les cas afficher la
couverture à droite de la notice. (cf. Annexe 3).
Si la couverture Google Books est déjà présente on va la déplacer, s'il n'y en a
pas on essaiera de récupérer une couverture Amazon. L'utilisation des web
services d'Amazon nécessitant l'utilisation d'une clé et un cryptage précis, il
n'est pas facile de le faire côté client. La totalité des interactions avec le web
service d'Amazon se passe donc côté serveur à travers un script qui se nomme
couv.php. On passe l'isbn de la notice source à ce dernier et on récupère les
couvertures fournies par Amazon. On profite de cet appel pour récupérer les
recommandations fournies par Amazon afin d'éviter un appel inutile à Amazon.
Autres éditions d'un ouvrage (via librarything)
L'affichage d'un cadre contenant les autres éditions d'un ouvrage se fait en
deux étapes.
Côté client
On lance une requête ajax sur le web service que propose librarything 6 en lui
passant en argument l'ISBN de la notice en cours (cette fonctionnaité ne
fonctionne que pour les ouvrages possédant un ISBN). On récupère alors une
réponse en xml qui va contenir les ISBN des autres éditions. On effectue cette
opération du côté client car le nombre d'interrogations de ce service par
adresse IP est limité à quelques centaines par jour et si on le faisait côté
serveur on serait rapidement limité.
Côté serveur
On va ensuite passé cette liste d'ISBN à un script sur le serveur geobib.fr
(xisbn.php). Ce script va alors lancer une interrogation du sudoc sur l'index
ISBN pour récupérer la liste des notices présentes. On n'affichera alors à
l'utilisateur que les éditions pour lesquelles on est en mesure de lui fournir une
notice dans le sudoc.
On génère directement dans la page xisbn.php le code HTML qui va nous servir
à afficher la liste des autres éditions à l'usager. Le script GM se contente alors
de l'inclure dans la zone div prévue à cet effet à la fin de la notice
bibliographique (cf. Annexe 6).
Recommandations (via Amazon)
Les recommandations sont récupérées par le script côté serveur qui nous sert à
interroger Amazon. Ce script prend en paramètre l'ISBN de l'ouvrage et renvoie
le code HTML que l'on insèrera dans le div prévu à cet effet (cf. Annexe 6).
6 http://www.librarything.com/api/thingISBN
6. Fil RSS
La gestion de flux RSS a été réalisée par Étienne Cavalié, auteur du blog
Bibliothèques [reloaded]. Le script GM se contente donc de passer au yahoo
pipe qu'il a réalisé la requête que l'on vient de passer au sudoc.
Permalien
Afin de faciliter la citation des notices, le script GM propose l'ajout à la suite du
PPN dans la notice d'un lien intitulé "Lien direct vers cette notice". Ce lien est
un fait une interrogation de l'index PPN avec le PPN de la notice courante.
On peut imaginer aller plus loin en proposant d'ajouter à cette fonctionnalités
des outils de type addthis qui permettent le partage d'une page web à travers
une multitude d'outils (delicious, digg ...)