# OpenAPI Documentation - JSON format (dot notation) mimeType = application/json post.operationId = post-v1-crossref-works-expand post.description = Récupération des métadonnées associées à un DOI 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 = Les prefixes DOI en version textuel 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 # Flow configuration [JSONParse] separator = * # Quelques paramètres modifiables si besoin [env] path = size value = 10 path = indent value = true # Début du traitement par lot [group] size = env('size') # Création d'une requete avec une liste d'identifiants [replace] path = output.0.rows value = fix(self.length) path = output.0.filter value = self().map('value').filter(x => x.match(/^10.\d{4,9}\/[^\s]+$/i)).map(x => 'doi:'.concat(x)).join(',') path = input value = self() [map] path = output # Envoi de la requete [map/URLStream] # see https://github.com/CrossRef/rest-api-doc#api-overview url = https://api.crossref.org/works path = .items.* json = true timeout = 30000 retries = 3 noerror = false [map/OBJFlatten] # Création d'un objet similaire à l'objet reponse [map/replace] path = __id value = get('doi.0') path = value value = self().omit(['indexed', 'reference']) # Reformatage des DOIS (input) [map] path = input [map/replace] path = __id value = get('value') path = value value = get('value') # Croissements des resultats et des dois (avec le champ __id comme clé) [exchange] value = get('output').unionBy(self.input, '__id') # Fin du traitement par lot [ungroup] # Suppression des champs ajoutés [exchange] value = self().omit('__id') # On marque les réponses qui n'ont pas abouties [swing] test = has('value.DOI') reverse = true [swing/assign] path = value value = fix('n/a') [dump] indent = env('indent', false)