CasuHAL AtelierAPI
Sommaire
- 1 Notes libres pour l'atelier API des journées CasuHAL 2018
- 2 13h30/13h45 : Dire ce qu'est une API
- 3 13h45 / 14h : Utiliser l'API d'archives-ouvertes ? démonstrations
- 4 14h / 14h15 : Le cas le + répandu = l'interrogation de l'API
- 5 Voir en 5 minutes tout ce que la doc aborde comme informations :
- 6 14h15 / 14h30 : Analyses de 4 requêtes précises
Notes libres pour l'atelier API des journées CasuHAL 2018
13h30/13h45 : Dire ce qu'est une API
- C’est un accès aux données.
- C’est une source de donnée qui est exposée de manière à être re-exploitée par des tiers.
- C’est prendre la main sur les données afin de les organiser et les agencer autrement que sur l’interface standard.
- C’est enrichir son site avec des données
- API ou Webservices qui permettent d'extraire ou d'afficher une information du catalogue à partir d'une URL contenant des critères de recherche. (exemple Le Sudoc met diverses API à la disposition des systèmes locaux pour intégrer à la volée aux fonctions locales des données du système central.)
- Les portails HAL sont une façon d'accéder au réservoir de données qu’est HAL
- l'API donne accès à la base de données : c'est donc logiquement l'accès le plus complet possible (contrairement au site web qui ne permet à l'usager de ne faire que ce qui a été prévu)
- Pour utiliser une API il faut connaître la structure des données, c’est pour ça qu’elles sont toujours accompagnées d’une documentation
- Les formats de données = Json (Utile d'installer Json view dans son navigateur)
- Sparql Endpoint : https://api.archives-ouvertes.fr/sparql
- Des API partout : Isidore, Istex, Sudoc Abes.
Sword
- L'API de dépôt SWORD permet l'import automatique de documents dans l'archive ouverte HAL.
- Comprendre qu'il s'agit d'une sorte de module permettant d'entrer des données dans HAL (comme on entre une donnée par le biais du formulaire de dépôt *manuel sur le site web HAL)
- Pour entrer des données il faut respecter d'emblée un ensemble de contraintes. Type format TEI des notices (https://hal.archives-ouvertes.fr/documents/aofr.xsd). Type archive ZIP
- Formulaire en ligne possible pour envoyer ses données : https://api.archives-ouvertes.fr/sword/upload/
13h45 / 14h : Utiliser l'API d'archives-ouvertes ? démonstrations
- Cadrage : De mon point c'est dans les cas où les autres moyens d'accès aux données de HAL ne "suffisent" pas au besoin exprimé (pour les stats = ne pas oublier le module stats dans l'admin
- Donc : notion de "besoin à exprimer"
- On interroge la base donc interroger l'API ne résout pas les éventuels problèmes de qualités des données.
- Un exemple site web / API :
https://hal.archives-ouvertes.fr/search/index : cocher toutes les options (pour comparer on cherche dans tout, voir que le site web ne cherche pas dans tout par défaut) : entrer les 2 mots api hal = 940 résultats. le site par défaut fait api AND hal
https://api.archives-ouvertes.fr/search/?q=api AND hal = 946 résultats (pourquoi 6 de + ? je ne sais pas : pas exactement la même requête en fait ou bien fraîcheur de la base ?).
Le cas d'une possibilité d'utilisation de l'API dans un site web
Exemple de remontée d'une requête dans une page d'un site web : http://larhra.ish-lyon.cnrs.fr/membre/1. Voir F12 / onglet réseau comment ça fonctionne. Nécessite une compétence en dévpt web pour la partie mise en forme de la requête dans la page web ?... (voir d'ailleurs si les modules drupal et autres permettent qqchose à la souris ?)
Le cas d'une autre possibilité -> enrichir un fichier de données avec des données de l'API :
Avec Open Refine = ouvrir un fichier / importer des données en moissonnant l'API
14h / 14h15 : Le cas le + répandu = l'interrogation de l'API
Déconstruction de requêtes
URL d'entrée
+
critère : ?q=valeur OU ?q=champ:valeur / Séparateur &
+
filtre : fq=champ:valeur / séparateur &
+
retour : fl=champ / séparateur ,
les filtres sont sur des listes fermées :
Les types de champs
https://api.archives-ouvertes.fr/docs/search/schema/field-types/#field-types
Comprendre les données interrogées
Exemple d'une notice auteur riche => https://api.archives-ouvertes.fr/ref/author/?q=docid:58415&wt=xml&fl=* / champs du référentiel authors => https://api.archives-ouvertes.fr/docs/ref/resource/author/schema/fields/#fields + aurehal + cv
Exemple notice structure => https://api.archives-ouvertes.fr/ref/structure/?q=docid:300297&wt=xml&fl=* / champs du référentiel structure => https://api.archives-ouvertes.fr/docs/ref/resource/structure/schema/fields/#fields
*Il faut au moins un paramètre dans l'URL pour faire une requête, ce paramètre est q
- Ce paramètre contient la requête à effectuer.
- Le paramètre doit être suivi du nom du champ dans lequel rechercher puis de la valeur à chercher.
- Si le nom du champ dans lequel chercher est omis, par défaut la recherche porte sur l'index text qui contient les valeurs de plusieurs champs.
- Pour chercher dans un champ particulier la syntaxe est champ:terme
- Pour chercher plusieurs champs, utiliser (terme1 terme2). L'opérateur booléen par défaut est AND
- Pour OR : Utiliser (terme1 OR terme2)
- Pour une phrase : Utiliser les guillemets doubles "phrase"
- Troncature ? * ~ proximité
//
- Le format de réponse par défaut est JSON
- Le format de réponse est spécifié par le paramètre wt : wt=json
- liste des formats dans la doc. Ajouter indent=true pour indenter le format de réponse.
//
- Par défaut seuls les champs docid et label_s sont retournés dans une réponse. Cependant tous les champs stockés peuvent être retournés dans le format de réponse
- Le paramètre pour choisir les champs à retourner est fl. Les champs demandés doivent être séparés par le signe ,
- Formats de sortie avec fl = JSON, XML et CSV uniquement
- On peut utiliser le caractère * comme troncature de nom de champ, eg fl=cha*
*fl=* signifie tous les champs possibles //
- Par défaut, les résultats sont triés par pertinence.
- Le tri des résultats peut se faire sur n'importe quel champ en évitant les champs de type text (suffixe "_t") et les champs multi-valués qui donneront des résultats imprévisibles.
- Le paramètre pour choisir les champs à retourner est sort + le sens de tri asc ou desc
//
- Le paramètre pour ajouter des filtres est fq suivi de la requête servant au filtre : fq=submitType_s:file
- Il est possible de faire des requêtes sur des intervalles avec cette syntaxe champ:[valeurDébut TO valeurFin]
- valeur maximale = * + doc pour les spécificités des calculs de dates
//
- Le nombre de réponses à retourner est définit par le paramètre rows .
- Le nombre total de dépôt/notices ne change pas avec ce paramètres, seul le nombre de résultats effectivement retournés varie.
- Par défaut les requêtes ne retournent que les 30 premiers résultats, le maximum autorisé est 10000. Si vous souhaitez plus de résultats vous devez utiliser la pagination.
- Le paramètre &rows=0 peut permettre de ne retourner que le nombre de résultats et d'enlever les documents du corps de la réponse. Vous pouvez par exemple utiliser ce paramètre à des fins de statistiques ou si vous voulez retourner uniquement des facettes.
//
- pagination : afficher 50 après les 50 1ers : start=50&rows=50
- Curseurs : si vous devez parcourir plusieurs milliers de résultats, pour des raisons de performance il est fortement recommandé d'utiliser les curseurs
//
- Les facettes sont des listes de termes extraits en fonction d'une requête.
- On peut les utiliser pour avoir une liste de valeurs distinctes sur un champ donné.
- Pour générer des facettes, il faut ajouter le paramètre facet=true à une requête.
- Il faut ensuite ajouter les champs avec lesquel construire les facettes avec le paramètre facet.field=NomDuChamp à une requête.
- facet.sort=index, count, prefix, contains (facet.contains.ignoreCase=true)
- Pivots
- plage de résultats
//
- Vous pouvez obtenir vos résultats de requêtes groupés selon un critère de votre choix, à condition que le critère soit représenté par un champ non multivalué et de type string.
Voir en 5 minutes tout ce que la doc aborde comme informations :
- Il faut au moins un paramètre dans l'URL pour faire une requête, ce paramètre est q
- Ce paramètre contient la requête à effectuer.
- Le paramètre doit être suivi du nom du champ dans lequel rechercher puis de la valeur à chercher.
- Si le nom du champ dans lequel chercher est omis, par défaut la recherche porte sur l'index text qui contient les valeurs de plusieurs champs.
- Pour chercher dans un champ particulier la syntaxe est champ:terme
- Pour chercher plusieurs champs, utiliser (terme1 terme2). L'opérateur booléen par défaut est AND
- Pour OR : Utiliser (terme1 OR terme2)
- Pour une phrase : Utiliser les guillemets doubles "phrase"
- Troncature ? * ~ proximité
//
- Le format de réponse par défaut est JSON
- Le format de réponse est spécifié par le paramètre wt : wt=json
- liste des formats dans la doc. Ajouter indent=true pour indenter le format de réponse.
//
- Par défaut seuls les champs docid et label_s sont retournés dans une réponse. Cependant tous les champs stockés peuvent être retournés dans le format de réponse
- Le paramètre pour choisir les champs à retourner est fl. Les champs demandés doivent être séparés par le signe ,
- Formats de sortie avec fl = JSON, XML et CSV uniquement
- On peut utiliser le caractère * comme troncature de nom de champ, eg fl=cha*
*fl=* signifie tous les champs possibles //
- Par défaut, les résultats sont triés par pertinence.
- Le tri des résultats peut se faire sur n'importe quel champ en évitant les champs de type text (suffixe "_t") et les champs multi-valués qui donneront des résultats imprévisibles.
- Le paramètre pour choisir les champs à retourner est sort + le sens de tri asc ou desc
//
- Le paramètre pour ajouter des filtres est fq suivi de la requête servant au filtre : fq=submitType_s:file
- Il est possible de faire des requêtes sur des intervalles avec cette syntaxe champ:[valeurDébut TO valeurFin]
- valeur maximale = * + doc pour les spécificités des calculs de dates
//
- Le nombre de réponses à retourner est définit par le paramètre rows .
- Le nombre total de dépôt/notices ne change pas avec ce paramètres, seul le nombre de résultats effectivement retournés varie.
- Par défaut les requêtes ne retournent que les 30 premiers résultats, le maximum autorisé est 10000. Si vous souhaitez plus de résultats vous devez utiliser la pagination.
- Le paramètre &rows=0 peut permettre de ne retourner que le nombre de résultats et d'enlever les documents du corps de la réponse. Vous pouvez par exemple utiliser ce paramètre à des fins de statistiques ou si vous voulez retourner uniquement des facettes.
//
- pagination : afficher 50 après les 50 1ers : start=50&rows=50
- Curseurs : si vous devez parcourir plusieurs milliers de résultats, pour des raisons de performance il est fortement recommandé d'utiliser les curseurs
//
- Les facettes sont des listes de termes extraits en fonction d'une requête.
- On peut les utiliser pour avoir une liste de valeurs distinctes sur un champ donné.
- Pour générer des facettes, il faut ajouter le paramètre facet=true à une requête.
- Il faut ensuite ajouter les champs avec lesquel construire les facettes avec le paramètre facet.field=NomDuChamp à une requête.
- facet.sort=index, count, prefix, contains (facet.contains.ignoreCase=true)
- Pivots
- plage de résultats
//
- Vous pouvez obtenir vos résultats de requêtes groupés selon un critère de votre choix, à condition que le critère soit représenté par un champ non multivalué et de type string.
14h15 / 14h30 : Analyses de 4 requêtes précises
Question : pourquoi l'export CSV n'est pas disponible en requête facet ?
1 / La question d'une liste d'auteur affiliés à un établissement (CF question précise posée sur la liste dans le cadre de la prépa de l'atelier)
Ils ont réalisé 2 essais. Explication ? = les auteurs ne sont pas affiliés (dans auréhal) comme on pourrait le penser = Donc on cherche en fait dans l'api de recherche de documents et on extrait les affiliations par ce biais là. Ils souhaitent avoir les identifiants (orcid, idref and cie) = impossible en réalité puisque ça c'est stocké dans auréhal author donc il faudrait re requêter 1 à 1...
Essai 1 -> https://api.archives-ouvertes.fr/ref/author/?q=structureId_i:81173&fl=docid,label_s,idHal_i,idHal_s,*_id&rows=10000&wt=xml Référentiel auteur
Noter : Ces exports réalisés d'une machine pour une machine nécessitent un post-traitement pour les reprendre "humainement" Démo OpenRefine?
Ensuite on propose 3 requêtes dont on pense que ce sont celles qui intéressent généralement les admin
2 / les affiliations : afficher ttes les structures affiliées à un auteur (https://api.archives-ouvertes.fr/docs/ref/resource/authorstructure)
https://api.archives-ouvertes.fr/search/authorstructure/?firstName_t=prenom&lastName_t=nom&i&wt=xml
5 / Je n'ai pas d'idées : quelles requêtes font les usagers ?? requête API pour retrouver des doublons potentiels de publication pour une collection donnée pour une année de production donnée http://api.archives-ouvertes.fr/search/?q=collCode_s:%22INRIA%22%20AND%20producedDateY_i:2015&rows=0&wt=xml&indent=true&facet=true&facet.pivot=title_s,docType_s,halId_s&facet.limit=10&facet.mincount=2
1 / ?
https://api.archives-ouvertes.fr/search/?fq=labStructId_i:186732&fq=submittedDate_tdate:[* TO NOW]&fq=docType_s:ART&fl=halId_s&fl=docid&fl=contributorFullName_s&fl=title_s&fl=language_s&fl=docType_s&fl=submittedDate_s&fl=producedDateY_i&fl=journalTitle_s&fl=issue_s&fl=volume_s&fl=page_s&fl=doiId_s&fl=audience_s&fl=comment_s&fl=authLastNameFirstName_s&fl=rteamStructAcronym_s&fl=authId_i&fl=abstract_s&rows=200&wt=xml
requête de recherche : ?fq puis &fl puis rows et enfin wt
labstructid = polen (univ orleans)
date : * to now
NumFound = <result name="response" numFound="146" start="0">
2 / Liste des structures rattachées à une structure de + haut niveau.
https://api.archives-ouvertes.fr/ref/structure/?wt=xml&q=parentDocid_i:300297&fl=*
On a 165 résultats
on veut exporter en csv = https://api.archives-ouvertes.fr/ref/structure/?wt=csv&q=parentDocid_i:300297&fl=*
Attention la conf par défaut limite à 30 = il faut ajouter rows.
==> Dire aux participants de poster leurs demandes de requêtes au support / revoir les pages requêtes sur le wiki ensemble ?