Skip to content

Ta BU dans Chrome (le kit Just Do It)

04/05/2011

Il y a quelques semaines, Symac a publié ici-même 3 billets (1, 2 et le bonus) expliquant comment il avait fait pour afficher, sous Chrome, le nombre de résultats Sudoc à une requête effectuée dans Google. Oui, la phrase est compliquée, alors la copie d’écran sera plus simple :

Pour l’adapter à mon propre opac, je m’étais fait confirmer la démarche de récupération et personnalisation du plugin paramétré pour le Sudoc. Et j’ai finalement pris le temps de la suivre (la démarche). Donc la voici.

1. Du fichier nb_res_sudoc.php au fichier nb_res_uns.php

C’est la première chose à faire : s’assurer qu’il est possible avec un script PHP d’interroger votre opac, et en récupérer le nombre de résultats. Je peux déjà prédire que ce sera impossible, ou seulement complètement tordu, dans bon nombre de cas.

Il faut aussi vous assurer que vous disposez d’un serveur avec PHP où est déployée la bibliothèque (ensemble de fonctions PHP) curl. Sur un serveur Wamp, par exemple, elle n’est pas déployée par défaut.

Ce fichier, une fois adapté à votre sauce, doit

  1. générer l’URL de requête
  2. dans la page de résultats générée, récupérer le nombre de résultats (affiché quelque part dans la page : il faut « simplement » indiquer le chemin vers ce nombre)
  3. produire un fichier résultat simple : {"nb":"124"}  (s’il y a 124 résultats à la recherche effectuée)

Donc :

  1. Récupération du fichier initial nb_res_sudoc.php (copier-coller du code) dans un fichier local intitulé « nb_res_uns.php »
  2. Modification de l’URL de requête rédigée pour le Sudoc, remplacée par celle qui me convient à moi (ligne 11)
    Spécificité Primo : il y a un système de redirection d’authentification (même si anonyme) avec passage par le PDS, si bien que l’URL de requête « naturelle » ne renvoie qu’une page de redirection automatique. L’ajout du paramètre &afterPDS=true après à la fin de l’URL permet d’éviter cette redirection.
  3. Pour connaître le chemin vers l’affichage du nombre de résultats (sur une requête donnée), le plus pratique est d’utiliser Chrome, de sélectionner le nombre affiché, puis Clic droit > Inspecter l’élément

    et tout en bas, j’ai le chemin intégral

    Le chemin initial qui cherchait la balise <span> suivie d’une série de chiffres suivie du mot « résultat » est remplacée par <p class="did"> suivie des mêmes conditions
    Spécificité Primo : le code initial de la page de résultats rendait peu pratique la récupération du nombre de résultats. Je suis allé modifier le fichier results_num_tile.jsp dans le répertoire views/brief, pour que le seul nombre de résultat soit encadré des balises <span>…</span>.
    Si vous avez des soucis pour récupérer votre nombre de résultats dans une page, n’hésitez pas à demander de l’aide en commentaire : d’autres commentateurs seront certainement ravis de vous aider🙂

Je dépose ce fichier sur mon serveur PHP, dans un répertoire /UnsInGoogle/ créé spécialement pour l’occasion, de manière à ce que l’URL de ce fichier (désormais accessible en ligne : http://appli-bu.unice.fr/UnsInGoogle/nb_res_uns.php) soit celle indiquée dans un fichier de paramétrages de l’extension, le fichier background.html (cf. plus bas).

Faire des tests

Tester des requêtes sous la forme : http://appli-bu.unice.fr/UnsInGoogle/nb_res_uns.php?q=kate+william, pour vérifier que le nombre de résultats est correct. Pensez à vérifier avec des requêtes ayant un grand nombre de résultats (parfois des espaces s’immiscent alors entre les chiffres : « 121 104 résultats », et il faut s’assurer que cet espace ne nuit pas à la récupération du nombre).

Quand vous constatez que ce fichier fonctionne bien, vous pouvez construire l’extension.

Erreur d’encodage possible : les serveurs sont apparemment plus ou moins pointilleux, et si celui de Symac fonctionne pour l’extension Sudoc, sur d’autres on a un message d’erreur disant que la variable $q n’est pas déclarée (je cite Symac : « c’est juste que j’ai codé avec les pieds« )
Pour résoudre l’erreur, il faut rajouter :

    }
else
{
$q = $_GET['q'];
}

après le
exit;
de la ligne 6

Bref, moi, j’obtiens ceci :


<?php
// Cette page va passer une requête au catalogue des BU de Nice pour récupérer le nombre de résultats
if (!isset($_GET['q']))
{
print "Manque la requête en paramètre";
exit;
}
else
{
$q = $_GET['q'];
}
$q = str_replace(" ", "+", $q);

// On récupère la page correspondant au résultat de cette requête
$url = "http://catalogue.unice.fr/primo_library/libweb/action/search.do?scp.scps=&srt=rank&tab=default_tab&mode=Basic&dum=true&fn=search&frbg=&dscnt=0&ct=search&vid=UNS&indx=1&vl(9521613UI0)=any&vl(9227079UI1)=all_items&afterPDS=true&vl(freeText0)=".$q;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$res = curl_exec($ch);

$tab_sortie = Array();
if (preg_match('/<span>([^<]+)<\/span>/', $res, $match)) { $tab_sortie["nb"] = $match[1]; }
else { $tab_sortie["nb"] = "0"; }

print json_encode($tab_sortie);
?>

2. Récupérer le fichier d’extension paramétré pour le Sudoc

Le fichier .zip est fourni par Symac (c’est en fait le même fichier que le plugin Chrome lui-même, mais avec une autre extension de fichier). Je l’ai décompressé.

3. Modifier le fichier background.html

Ce fichier indique à Chrome qu’il peut en toute confiance se connecter au serveur qui va lui renvoyer le nombre de résultats. Comme je vais stocker mon extension sur un serveur de la BU (dans un répertoire UnsInGoogle), j’autorise donc le fichier http://appli-bu.unice.fr/UnsInGoogle/nb_res_uns.php (ligne 27).
[sur le fichier nb_res_uns.php : voir plus haut]

4. Modifier sudoc_in_google.js

Ce sont les lignes 21 à 28 de ce fichier qui déterminent le texte, l’icône et le lien qui vont apparaître sur les pages de résultats Google.

Je dois donc modifier ce qui était fait pour le Sudoc, afin de tout adapter à mon propre catalogue.

  1. Libellé (ligne 24) : je remplace « Bibliothèques universitaires françaises » par « Catalogue BU Nice »
  2. Icône (ligne 25) : le fichier appelle une image appelée logo.png stockée dans le répertoire img de l’extension. Je vais donc remplacer celle-ci par la mienne dans ledit répertoire
  3. syntaxe de l’URL de requête (lignes 27-28) : les mots recherchés (paramètre q) sont intégrés à l’URL de recherche permettant de rebondir vers le Sudoc.
    Je remplace
    <a href="http://www.sudoc.abes.fr/DB=2.1/SET=1/TTL=1/CMD?ACT=SRCHA&IKT=1016&SRT=RLV&TRM=' + q +'">
    par
    <a href="http://catalogue.unice.fr/primo_library/libweb/action/search.do?&srt=rank&vl(freeText0)=' + q +'dum=true&dscnt=0&ct=searchmode%3DBasic&vid=UNS&vl(5776331UI1)=all_items&frbg=&scp.scps=&indx=1&fn=search&tab=default_tab&vl(5770651UI0)=any&afterPDS=true">
    Pour avoir cette URL, je lance une recherche dans mon Opac et je remplace les mots recherchés par les caractères en gras (‘ + q +’) qui font la concaténation de la chaîne de caractères fixe et de la variabel
    Remarque importante : en récupérant l’URL de la recherche, enlever le paramètre « identifiant de session » qui ressemble souvent à : &id=12348717158744654987789
    Spécificité Primo : j’ai remis le paramètre &afterPDS=true, car en cliquant sur le lien, j’ai constaté que Chrome n’arrivait pas ensuite à suivre la redirection et restait sur une page vide.
  4. Texte suivant le nombre de résultats (ligne 33) : je remplace « dans le Sudoc » par « dans le catalogue des BU de Nice »

5. Modification du manifest.json

Ce fichier contient une description globale de l’extension. Je l’adapte  : en gros je remplace « Sudoc » par « Catalogue BU Nice », et je remplace le nom de domaine initial (http://www.geobib.fr/*) par le mien (http://appli-bu.unice.fr/*).

6. Constitution de l’extension

J’ouvre Chrome, je clique sur la clé anglaise  > Outils > Extensions. Dans l’onglet qui s’ouvre avec la liste des extensions, lien en haut à droite « Mode développeur » puis le bouton empaqueter l'extension.

Sélection du répertoire qui contient l’extension, puis OK. Il me génère deux fichiers, dont l’un est l’extension à charger sur le serveur.

La voilà (à ouvrir avec Chrome, donc).

7. Et en cas de mise à jour de l’opac ?

  • dans le fichier nb_res_uns.php : l’URL de requête et le chemin vers le nombre de résultats (screen scraping)
  • dans l’extension elle-même :
    • dans le fichier sudoc_in_google.js : mettre à jour l’URL de requête
    • dans le fichier manifest.json : modifier la version de l’extension (sinon personne ne saura jamais que vous l’avez mise à jour…)

NB : flemmardise

J’ai laissé dans certains fichiers le nom « sudoc » initial. Certes, ce n’est pas très propre mais après tout, personne ne les voit, et puis je n’étais pas sûr qu’en modifiant le nom leur utilisation par d’autres fichiers de l’extension, que je n’ai même pas ouverts, n’allait pas être rendue impossible. Alors…

8. Et la mise à disposition de l’outil ?

C’est bien beau de fabriquer un truc qui fonctionne, il faut encore le montrer aux lecteurs de manière adéquate pour que le maximum de personnes potentiellement intéressées l’installe. Donc :

  1. accessible immédiatement (pas dans une page planquée dans la sous-rubrique d’une rubrique « informations diverses »)
    sur la page d’accueil du site web
    ou sur la page d’accueil de l’opac
    et c’est encore mieux si l’opac et le site web ne font qu’un…
  2. texte exprimant en 5-6 mots que oui, c’est bien à toi que je parle
  3. texte court
  4. texte explicite (à quoi ça sert)

Pour l’instant, on bosse sur la mise à jour de notre opac (migration Primo 2 vers Primo 3). Mais j’espère pour la mise en production de Primo 3 avoir trouvé the solution à toutes ces exigences.

Ce qui est décrit, c’est pour le courant. Il faut ensuite, autant que possible, signaler l’info au lancement (sur Facebook, par exemple dans des groupes bien choisis).

(C’est un fantasme, évidemment !)

19 commentaires
  1. Sylvain Machefert (Symac) permalink
    04/05/2011 15:46

    En effet j’avais codé avec les pieds et je n’avais pas cherché à savoir pourquoi ça ne fonctionnait pas. L’explication est la suivante : sur certains serveurs on n’a pas besoin de récupérer les paramètres à travers $_GET et pour récupérer le paramètre q, on peut utiliser directement $q. C’est de moins en moins le cas mais visiblement c’est le cas sur mon serveur chez OVH, c’est pour ça que $q était bien initialisé. Mais pour être plus propre il faut l’initialiser de la manière suivante : https://gist.github.com/955332

    Dans l’exemple que tu donnes j’ai l’impression que $q va toujours prendre la valeur « 1 » et retourner toujours le même nombre de résultats, non ? En tout cas plusieurs milliers de notices pour Talence quand je fais le test je pense qu’il y a un bug😉

  2. 04/05/2011 15:51

    @Sylvain : p$#!n de b&^£l de m@%#e !
    Je corrige et je teste ton nouveau code
    (la solution proposée ne venait pas de moi, j’en suis bien incapable #défausse)

  3. 04/05/2011 15:58

    Bon, ça a l’air de marcher, hop, ni vu ni connu…

  4. 04/05/2011 16:04

    @Symac : au fait, une fois qu’on a mis en place ce petit script PHP pour son petit catalogue à soi, rien n’empêche de l’exploiter dans un script GreaseMonkey ou autre extension pour autre navigateur, non ?
    (ce n’est pas une requête : c’est une question sur le principe).

  5. Sylvain Machefert (Symac) permalink
    04/05/2011 16:18

    Oui c’est possible. J’avais d’ailleurs pensé intégrer dans sudoc+ l’affichage sur la liste de résultats de Google, mais ce n’est qu’à l’état de réflexion pour le moment …

  6. 09/06/2011 10:41

    Bonjour,
    dans l’OPAC AbsysNET, le nombre de résultats s’affiche comme ça :
    Enregistrements 1/10 de 42
    Comment puis-je faire pour ne récupérer que « 42 » ?
    Je vous remercie.

  7. 09/06/2011 10:48

    Pardon, le code a été interprété dans le commentaire :
    Enregistrements 1/10 de 42

  8. 09/06/2011 10:51

    Arrrrrrgh !
    <td class= »sizetext2″>Enregistrements 1/10 de 42</td>

  9. 09/06/2011 10:58

    C’est très simple : soit vous faites comme moi et vous modifiez le template de l’opac pour avoir une valeur mieux identifiée dans le code de la page,
    soit vous demandez à Symac de vous sortir l’expression régulière qui marchera.
    Je pense qu’en fournissant un exemple URL affichant la liste des résultats, ça ira plus vite🙂

  10. 09/06/2011 12:03

    Ok, alors si Symac passe par là, voici une requête pour notre OPAC : http://195.221.120.229/cgi-bin/abnetclop?ACC=DOSEARCH&xsqf99=orwell
    Merci !

  11. 09/06/2011 12:12

    Quand je disais qu’en fournissant une URL, ça irait plus vite🙂
    Dans le code de la page indiquée, on constate que le nombre de résultats (111 pour la requête « Orwell ») apparaît en plusieurs endroits, et notamment dans du code JavaScript qui gère la navigation.
    Donc par exemple, on a (ligne 63)
    ndoc>111 |

    N’est-ce pas exploitable ?
    A tester, mais il me semble que pour la ligne de code qui récupère le nombre de résultats dans le fichier nb_res_xxx.php, ça deviendrait :
    if (preg_match('ndoc>(\d+) |', $res, $match)) { $tab_sortie["nb"] = $match[1]; }

  12. 09/06/2011 12:14

    Au fait, une petite précision : si vous voulez indiquer du code dans les commentaires, et faire en sorte que les guillemets " ne soient pas transformés en « guillemets français », vous pouvez encadrer le code des balises <code> et </code>
    (je pense par exemple ) ce commentaire-là)

  13. 09/06/2011 12:15

    Et après vous fournirez le kit Absysnet aux autres collègues via l’Alambic ?

  14. 09/06/2011 12:19

    Oui, bien entendu, je partagerai. Mais il faut d’abord que j’arrive à faire marcher le truc ! Merci pour votre aide si précieuse.

  15. Sylvain permalink
    21/06/2011 14:42

    Bonjour,
    si la solution proposée par Étienne fonctionne c’est parfait, sinon je veux bien creuser à l’occasion.

  16. 21/06/2011 14:59

    Merci Sylvain, mais notre développeur, Mathieu, s’est penché sur la question et a tout arrangé. Apparemment, il y avait une page intermédiaire dans l’OPAC qui gênait. Dès que nous aurons terminé l’extension, on mettra tout par écrit.

Trackbacks

  1. links for 2011-05-06 || Pierre-Emmanuel Weck
  2. Ma BIU dans Firefox | aka Reup
  3. AbsysNET dans Chrome | L'alambic numérique

Les commentaires sont fermés.

%d blogueurs aiment cette page :