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

post.operationId = post-v1-unpaywall-works-expand
post.description = Récupération des informations associées à un DOI dans la base Unpaywall
post.summary = Récupération à partir d'un tableau d'objets avec a 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

# Rétablissons la coloration syntaxique (une ou deux apostrophes selon les besoins): '

# 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-works-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 toutes les valeurs nécessaires pour créer une requête
[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('')
value = fix('{GetByDOI(dois:[', self.dois, ']){doi,data_standard,genre,is_paratext,is_oa,journal_is_in_doaj,journal_is_oa,journal_issns,journal_issn_l,journal_name,oa_status,has_repository_copy,published_date,publisher,title,updated,year,oa_locations{host_type,is_best,license,url,url_for_landing_page,url_for_pdf},first_oa_location{host_type,is_best,license,pmh_id,updated,url,url_for_landing_page,url_for_pdf,version}}}').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 abouti
[spawn/combine/drop]
path = is_oa

# On crée 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 abouti
[swing]
test = has('value.is_oa')
reverse = true

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

[dump]
indent = env('indent')