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

post.operationId = post-v1-hal-works-expand
post.description = Récupération des métadonnées associées à un DOI dans HAL
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.35562/arabesques.1222
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
#?q=doiId_s:(10.3324/haematol.2016.148908%20OR%2010.35562/arabesques.1222)&wt=json&fl=label_xml
[replace]
path = output.0.q
value = self().map('value').filter(Boolean).map(JSON.stringify).join(' OR ').thru(allIdentifiers => `doiId_s:(${allIdentifiers})`)

path = output.0.wt
value = json

path = output.0.fl
value = label_xml

path = output.0.rows
value = env('size')

path = input
value = self()

[map]
path = output

# Envoi de la requete
[map/URLStream]
url = https://api.archives-ouvertes.fr/search/
json = true
path = response.docs.*
timeout = 30000
retries = 3
noerror = false


# Création d'un objet réponse
[map/exchange]
value = get('label_xml')

[map/spawn]
[map/spawn/XMLParse]
separator = /TEI
[map/spawn/OBJFlatten]
[map/spawn/replace]
path = id1
value = get('text/body/listBibl/biblFull/sourceDesc/biblStruct/idno').filter({type: 'doi'}).first().get('$t')

path = id2
value = get('text/body/listBibl/biblFull/sourceDesc/biblStruct/idno/$t')

path = value
value = self()

[map/spawn/replace]
path = id
value = fix(self.id1, self.id2).filter(Boolean).first()

path = value
value = get('value')

# Croisements des resultats et des dois
[exchange]
value = get('input').map((i) => ({ ...i, value:_.get(_.find(self.output, {id:i.value}), 'value') }))

# Fin du traitement par lot
[ungroup]

# On marque les réponses qui n'ont pas abouti
[swing]
test = has('value.xmlns$hal')
reverse = true

[swing/assign]
path = value
value = fix('n/a')

# Prevents keys from containing the $ character (which is forbidden by nodejs mongoDB driver)
[OBJFlatten]
separator = fix('/')
safe = false

[exchange]
value = self().mapKeys((value, key) => key.replace(/\$/g, '_'))

[OBJFlatten]
separator = fix('/')
reverse = true
safe = false
# ...

[dump]
indent = env('indent', false)