Expérimentation en Python pour accéder à ISTEX

ISTEX a pour ambition de « construire le socle de la bibliothèque scientifique numérique nationale. » Il s’agit d’une initiative dans le cadre des « Investissements d’Avenir » soutenus par l’Etat français.

ISTEX acquiert et structure de grandes quantités de documents scientifiques pour les rendre accessibles.

Nous nous intéressons ici à l’accès aux ressources d’ISTEX via une API.

API ISTEX

Les informations concernant l’API ISTEX se trouvent à l’adresse https://api.istex.fr/documentation/. Certaines ressources sont en accès libre, d’autres nécessitent une authentification.

L’API propose plusieurs modes d’authentification. Nous allons utiliser l’authentification par clé (token d’identification). La méthode décrite (https://api.istex.fr/documentation/access/) est en deux étapes: création du token, accès à l’API à l’aide du token.

La création du token nécessite de s’identifier à l’adresse https://api.istex.fr/token/ soit par son établissement d’enseignement/recherche en le sélectionnant dans une liste, soit en utilisant un CRU -Compte Réseau Universel- que l’on peut créer en ligne. Une fois cette authentification réalisée, un accès à la même adresse renvoie une structure JSON telle que:

{
  "_comment": "Votre token d'identification a bien été généré. 
    Vous pouvez dès à présent vous indentifier en utilisant le header 
    "Authorization: Bearer _accessToken" 
    (remplacer _accessToken par votre token)..."
  "_accessToken": "eXJXbXciOeyJpZCI6Im1vaXNzaW5hI..."
}

Le champ « _accessToken » de la structure JSON obtenue est le token qui pourra être utilisé lors des accès suivants à l’API. J’ai sauvé la structure JSON dans un fichier tokenIstex.json.

Exemple de requête à ISTEX

Un code minimal pour interroger ISTEX est alors par exemple

import json
import urllib

istexpApiAccess = "https://api.istex.fr/"
token = "<ici mettre votre token>"
urlquery = istexpApiAccess+'document/?q=author.name:Moissinac'
headers = {'Authorization': 'Bearer ' + token}
req = urllib.request.Request(urlquery, None, headers)
with urllib.request.urlopen(req) as rep:
    results = json.loads(str(rep.read().decode('utf-8')))
    print(results)

Vous devez renseigner votre token.

La requête proprement dite est la valeur du paramètre q. Ici, j’indique que je veux chercher suivant le critère author.name qui doit avoir la valeur Moissinac.

La réponse est une structure JSON sur le modèle fictif suivant:

{
  "total": 129,
  "nextPageURI": 
    "https://api.istex.fr/document/?q=author.name:Moissinac&size=10&defaultOperator=OR&from=10",
  "firstPageURI": 
   "https://api.istex.fr/document/?q=author.name:Moissinac&size=10&defaultOperator=OR&from=0",
  "lastPageURI": 
   "https://api.istex.fr/document/?q=author.name:Moissinac&size=10&defaultOperator=OR&from=119",
  "hits": [
    {
      "title": "SVG: open format for graphic",
      "id": "F8F283D5CBD747547F48F8057F2190FB11772A76",
      "score": 7.9658365
    },
    {
      "title": "Oil Impacts on Marine Invertebrate Populations and Communities",
      "id": "A1465DF05E586E93F745415C7AB4EB45FC9CFF10",
      "score": 6.441195
    },
...
  ]
}

On y trouve le nombre total de réponse, par défaut les 10 premières réponses dans le champ hits, les urls de la page suivante, de la première et de la dernière page de réponses. Pour chaque réponse, on a le titre, un identifiant de ressource ISTEX -que nous utiliserons dans d’autres requêtes- et un score -qui évalue une pertinence de la réponse?.

La composition des requêtes est décrite ici:

https://api.istex.fr/documentation/search/

La requête suivante

urlquery = istexpApiAccess+'document/?q=semantic'

donnera les documents contenant le mot semantic dans un des champs indexés.

et la requête

urlquery = istexpApiAccess+"document/982F365ECC48B450E090EC595C09C8472DE784CF/fulltext/pdf"

donnera le document dont l’identifiant ISTEX est 982F365ECC48B450E090EC595C09C8472DE784CF.

Pour avoir plus d’informations sur ce document, il suffit d’utiliser cet identfiant pour la requête

urlquery = istexpApiAccess+"document/982F365ECC48B450E090EC595C09C8472DE784CF

qui renvoie une structure JSON avec notamment le titre, les auteurs et leur affiliation….

Précautions

De façon classique lorsqu’on utilise une API, il faut éviter de surcharger le serveur en envoyant des salves de requêtes générées par un logiciel.

Vous devez utiliser une des méthodes permettant d’appeler une fonction chaque N secondes. La méthode appelée consomme à chaque fois une requête placée dans une liste de requêtes. J’ai ainsi sollicité ISTEX par une requête toutes les 5 secondes.

Résultats

Sur cette base, j’ai cherché les publications de Telecom ParisTech.

La requête

urlquery = istexpApiAccess+"document/?q=Telecom%20AND%20ParisTech"

donne 479 références. Tandis que la requête

urlquery = istexpApiAccess+"document/?q=Télécom%20AND%20ParisTech"

donne 225 références.

 

A propos Moissinac

Maitre de conférence à Télécom Paris, Département Image, Données, Signal - Groupe Multimédia Jean-Claude Moissinac a mené des recherches sur les techniques avancées pour la production, le transport, la représentation et l’utilisation des documents multimédia. Ces travaux d'abord ont évolué vers la représentation sémantique de données liées au multimédia (process de traitement de médias, description d'adaptations de média, description formelle d'interactions utilisateurs). Aujourd'hui, les travaux portent sur la constitution de graphes de connaissances. Principaux axes de recherche actuel : représentations sémantiques de connaissances, constitution de graphes de connaissances, techniques d'apprentissage automatique sur ces graphes
Ce contenu a été publié dans Données publiques, SemBib, Uncategorized. Vous pouvez le mettre en favoris avec ce permalien.