diff --git a/biblio-tools/v1/unpaywall/works/expand.ini b/biblio-tools/v1/unpaywall/works/expand.ini new file mode 100644 index 0000000..9cc9f28 --- /dev/null +++ b/biblio-tools/v1/unpaywall/works/expand.ini @@ -0,0 +1,109 @@ +# OpenAPI Documentation - JSON format (dot notation) +mimeType = application/json + +post.operationId = post-v1-unpaywall-expand +post.description = Récupération des informations OA 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] +separator = * + +[env] +path = size +value = 10 + +path = indent +value = true + +path = token +value = env('UNPAYWALL_API_KEY') + +[assign] +path = value +value = get('value').toLower() + +# 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 +#cacheName = post-v1-unpaywall-expand + +[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 +url = http://vpunpaywallmir.intra.inist.fr:59700/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/assign] +path = id +value = get('doi').toLower() + +# 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')