Newer
Older
web-services / biblio-tools / v1 / openalex / works / expand.ini
# OpenAPI Documentation - JSON format (dot notation)
mimeType = application/json

post.operationId = post-v1-openalex-works-expand
post.description = Récupération des métadonnées associées à un DOI dans openAlex
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
plugin = analytics
plugin = storage

# Flow configuration
[JSONParse]

[expand]
path = value
cacheName = post-v1-openalex-works-expand

[expand/URLFetch]
url = get('value').prepend('https://api.openalex.org/works/doi:')
json = true
target = fix('value')
timeout = 30000
retries = 5
; évite l'arret du traitement, en cas d'erreur, on retourne la valeur non traitée
noerror = true

; Suppression de certains champs
[expand/exchange]
value = omit(['value.referenced_works', 'value.related_works', 'value.abstract_inverted_index'])

; Simplification de la structure de la notice
[expand/OBJFlatten]

[expand/replace]
path = id
value = get('id')
path = value
value = self().omit('id').mapKeys((val, key) => key.replace('value/', ''))

; Simplification de la structure du champs authorships
[expand/expand]
path = value.authorships

[expand/expand/exploding]

[expand/expand/OBJFlatten]

[expand/expand/replace]
path = id
value = get('id')
path = value
value = self().omit('id').mapKeys((val, key) => key.replace('value/', ''))

[expand/expand/aggregate]


# 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)