# OpenAPI Documentation - JSON format (dot notation) mimeType = application/json post.operationId = post-v1-unpaywall-expand post.description = Récupération des métadonnées associées à DOI dans la base Unpaywall post.summary = Récupération à partir d'un tableau d'objets avec à minima un champ value contenant le DOI post.tags.0 = biblio-tools post.requestBody.content.application/json.example.0.id = 1 post.requestBody.content.application/json.example.0.value = 10.4000/edc.9014 post.requestBody.content.application/json.schema.$ref = #/components/schemas/JSONStream post.requestBody.required = true post.responses.default.content.application/json.example.0.id = 1 post.responses.default.content.application/json.example.0.value = { ... } post.responses.default.content.application/json.schema.$ref = #/components/schemas/JSONStream post.responses.default.description = une réponse sous forme d'un objet ou n/a pour chaque DOI post.parameters.0.description = Indenter le JSON résultant post.parameters.0.in = query post.parameters.0.name = indent post.parameters.0.schema.type = boolean # Necessary plugins [use] plugin = basics plugin = analytics plugin = storage # Flow configuration [JSONParse] legacy = false separator = $ [env] path = size value = 10 path = indent value = true path = token value = env('UNPAYWALL_API_KEY') # Pour traiter par lot on groupe puis on utilise spawn qui crée un buffer par lot [group] size = env('size') [spawn] [spawn/ungroup] [spawn/bufferize] # On réalise un mapping dynamique sur le champ value (et on sauvegarde les correspondances trouvées) [spawn/combine] path = value default = n/a primer = get('bufferID') prepend = buffers append = transit persistent = true [spawn/combine/group] size = env('size') [spawn/combine/replace] path = dois value = self().map('value').map(x => JSON.stringify(x)).join(',') # On crée un objet contenant tous les valeurs nécessaire pour créer une requete [spawn/combine/replace] path = query value = fix('{GetByDOI(dois:[', self.dois, ']){doi, is_oa, oa_status, has_repository_copy, best_oa_location { host_type }}}').join('') [spawn/combine/URLStream] url = https://unpaywall.inist.fr/api/graphql header = env('token').prepend('x-api-key:') path = data.GetByDOI.* timeout = 5000 noerror = false # On supprime les réponses qui n'ont pas abouties ( [spawn/combine/drop] path = is_oa # On créé l'object attendu par combine { id, value } pour faire le mapping [spawn/combine/replace] path = id value = get('doi') path = value.is_oa value = get('is_oa') path = value.oa_status value = get('oa_status') path = value.host_type value = get('best_oa_location.host_type', 'n/a') path = value.has_repository_copy value = get('has_repository_copy', 'n/a') # On nettoie l'objet en supprimant les champs temporaires [spawn/exchange] value = self().omit('bufferID') # On simplifie la structure [assign] path = value value = get('value.value', self.value) # On marque les réponses qui n'ont pas abouties [swing] test = has('value.is_oa') reverse = true [swing/assign] path = value value = fix('n/a') [dump] indent = env('indent')