Skip to content

Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API (1/4) : Présentation

20/07/2016

J’avoue que je n’arrive pas à comprendre pourquoi je trouve aussi peu sur Internet de documentation et de cas d’utilisations des fonctions couplées SERVICEWEB + FILTREXML (ou FILTRE.XML sous Excel).

Sans doute parce que pour Excel, c’est dans les versions postérieures à 2010 (Excel 2010 non compris), et qu’il faut se rabattre sur LibreOffice Calc (sans aucun scrupule, d’ailleurs !) pour les établissements qui n’auraient pas les versions les plus récentes de la suite Office.

Pour faire simple : ces fonctions permettent d’interroger facilement des API fournissant du XML, pour récupérer une information précise, à partir de données présentes dans un tableau, sans utiliser ni XSL ni aucun autre langage de programmation.

La seule compétence à avoir, c’est XPath, c’est-à-dire connaître la manière de naviguer dans un fichier XML (voir notamment dans la série « XSL » les billets sur XPath, dont celui-ci donne les principes et celui-là  récapitule toutes les options).

Un exemple simple pour commencer : récupérer les PPN Sudoc d’une série d’ISBN

vous disposez d’un fichier contenant des métadonnées bibliographiques de base à 5 colonnes : ISBN, Titre, Auteur, Editeur, Date – et vous voulez savoir si ces notices sont déjà présentes dans le Sudoc.

tableau livres

En gros, ce qui vous intéresse est de faire jouer l’API isbn2ppn, pour convertir l’ISBN en PPN et ajouter une colonne PPN sur la droite.

Pour commencer, on va découper le processus en plusieurs fois, mais ça peut ensuite se faire en une seule étape.

  1. Construire l’URL de requête de l’API, sur le modèle http://www.sudoc.fr/services/isbn2ppn/{isbn}
    Comme {isbn} doit prendre la valeur de l’ISBN (imaginons que ce soit en colonne A), je vais créer une 6e colonne (F) contenant :
    ="http://www.sudoc.fr/services/isbn2ppn/"&A2
    Ce qui va concaténer la chaîne de caractère correspondant à l’URL racine, et la valeur de la cellule A2. Je reporte ensuite cette formule dans l’ensemble des lignes de la colonne F
    première formule - URL

  2. Récupérer le résultat (XML) correspondant à l’URL
    Je vais faire ça en colonne G :
    Le contenu de la cellule G2 sera :
    =SERVICEWEB(F2)
    Tout simplement, Calc ou Excel va suivre l’URL de la cellule D2 et rapatrier le contenu
    deuxieme formule - resultat XML

  3. Dans le résultat XML, récupérer seulement une information en exprimant en XPath le chemin vers cette information.
    Je vais faire ça en colonne H (cellule H2) :
    =FILTREXML(G2;"//result/ppn")
    troisième formule - PPN
    ou =FILTRE.XML(G2;"//result/ppn") sous Excel

Une fois que ces 3 colonnes ont été renseignées, vous avez donc une table de correspondance ISBN → PPN

Ajouter des métadonnées descriptives

Notez que dès lors que vous avez le PPN, vous pouvez de la même manière construire l’URL http://www.sudoc.fr/{ppn}.rdf pour récupérer dans ce fichier d’autres informations (comme le PPN de l’auteur, la zone de description, etc.

Pour cela j’utilise la colonne I pour reconstruire l’URL : j’indique en I2 :
="http://www.sudoc.fr/"&H2&".rdf"

Puis la colonne J pour récupérer le contenu de la notice RDF
=SERVICEWEB(I2)

Puis la colonne K pour récupérer le contenu de la balise <dc:description/> :
=FILTREXML(J2;"//dc:description")

Ou, plutôt que de découper ça en 3 étapes, j’aurais pu directement écrire en cellule I2 (à côté de la colonne H contenant les PPN) :

=FILTREXML(SERVICEWEB("http://www.sudoc.fr/"&H2&".rdf");"//dc:description")

en imbriquant les fonctions les unes dans les autres.

Ca tient en une ligne, et c’est particulièrement rapide pour récupérer une valeur simple (dc:description) correspondant à une variable en entrée (ici, le PPN).

J’évoquerai plus tard 2 problèmes rencontrés régulièrement :

  • les valeurs répétables
    Car la formule FILTREXML() ne va récupérer que la première occurrence du XPath que vous avez indiqué (donc si un ISBN renvoie plusieurs PPN, il va vous renvoyer seulement le premier, sans préciser qu’il y en a d’autres)

  • les espaces de nom, y compris les espaces de nom sans nom [sic]

Au préalable, je vous donnerai dans un prochain billet un autre exemple d’enrichissement avec ces fonctions, mais en utilisant le SPARQL Endpoint de DataBnF (SPARQL servant alors d’API universelle, permettant d’interroger n’importe quel critère d’une base de triplets afin de retourner n’importe quel résultat associé à ce critère).

 

6 commentaires
  1. 20/07/2016 12:57

    Bonjour,

    Merci beaucoup pour cette info !!🙂
    la démo est claire, la méthode simple et les possibilités prometteuses !

    J’attends avec impatience le billet sur le SPARQL Endpoint

  2. 20/07/2016 13:38

    Re,

    Et pour le format json, il n’y a rien ? :-\

  3. 21/07/2016 08:34

    @Dominique : merci pour le premier commentaire
    Concernant le second :
    1. la fonction SERVICEWEB ne contrôle pas le format du fichier, elle se contente d’importer le contenu qu’il y a au bout de l’URL. Donc elle peut importer du JSON sans difficulté. Elle peut aussi importer des pages HTML (faut juste voir à combien de caractères une cellule est limitée)
    2. une fois qu’on a du JSON dans une cellule Excel ou Calc, qu’est-ce qu’on en fait ?
    Il semble qu’il y avait un projet d’extension permettant d’avoir une fonction PARSEJSON, mais aucune mise à jour du code source depuis 2 ans, et pas de fichier exécutable fourni…
    Donc reste le chercher-remplacer comme si le JSON était du texte :-\
    ou reprendre le code source pour le compiler (personnellement, je ne sais pas encore construire un plugin Calc, je suppose que c’est un simple ZIP dont l’extension est « .otx »)

    Du côté d’Excel, je suppose que VBA permet de faire un certain nombre de choses, mais il n’y a aucune fonction native, pour l’instant, sur le modèle de PARSEXML.

    Et si je comprends bien cet article, Excel ne sera pas forcément développé dans ce sens, et la manipulation de données pourrait être dévolue à des applications tierces dans la stratégie de Microsoft.

Trackbacks

  1. Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API (2/4) : résultats SPARQL | Bibliothèques [reloaded]
  2. Enrichir ses tableurs Excel ou LibreOffice Calc...
  3. Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API (4/4) : résultats multiples | Bibliothèques [reloaded]

Les commentaires sont fermés.

%d blogueurs aiment cette page :