diff --git a/biblio-tools/v1/crossref/works/expand.ini b/biblio-tools/v1/crossref/works/expand.ini index 6d873d9..d696ee7 100644 --- a/biblio-tools/v1/crossref/works/expand.ini +++ b/biblio-tools/v1/crossref/works/expand.ini @@ -18,69 +18,81 @@ post.parameters.0.name = indent post.parameters.0.schema.type = boolean - # Necessary plugins [use] plugin = basics -plugin = analytics -plugin = storage # Flow configuration [JSONParse] separator = * -[expand] -path = value -size = 10 -cacheName = post-v1-crossref-works-expand +# Quelques paramètres modifiables si besoin +[env] +path = size +value = 10 -[expand/bufferize] +path = indent +value = true -[expand/combine] -path = env('path', 'value') -primer = get('bufferID') -prepend = buffers -append = transit +# Début du traitement par lot +[group] +size = env('size') -[expand/combine/exchange] -value = get('value') - -[expand/combine/group] -size = 100 - -[expand/combine/replace] -path = rows +# Création d'une requete avec une liste d'identifiants +[replace] +path = output.0.rows value = fix(self.length) -path = filter -value = self().filter(x => x.match(/^10.\d{4,9}\/[^\s]+$/i)).map(x => 'doi:'.concat(x)).join(',') -# see https://github.com/CrossRef/rest-api-doc#api-overview -[expand/combine/URLStream] -url = https://api.crossref.org/works -path = .items.* -timeout = 30000 +path = output.0.filter +value = self().map('value').filter(x => x.match(/^10.\d{4,9}\/[^\s]+$/i)).map(x => 'doi:'.concat(x)).join(',') -; Simplification de la structure à postriori (le faire à priori était également possible) -[expand/combine/exchange] -value = self().omit(['indexed', 'reference']) - - -[expand/combine/OBJFlatten] - - -[expand/combine/replace] -path = id -value = get('DOI') -path = value +path = input value = self() -# On nettoie l'objet en supprimant les champs temporaires -[expand/exchange] -value = self().omit('bufferID') +[map] +path = output -[assign] +# 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 = get('value.value', 'n/a') +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] @@ -91,6 +103,6 @@ path = value value = fix('n/a') - [dump] indent = env('indent', false) + diff --git a/biblio-tools/v1/istex/works/expand.ini b/biblio-tools/v1/istex/works/expand.ini index 93d1231..9f6a60c 100644 --- a/biblio-tools/v1/istex/works/expand.ini +++ b/biblio-tools/v1/istex/works/expand.ini @@ -38,7 +38,7 @@ [group] size = env('size') -# Création d'une requete ISTEX graphql avec une liste d'identifiants +# Création d'une requete avec une liste d'identifiants [replace] path = output.0.q value = self().map('value').filter(Boolean).map(JSON.stringify).join(' ').thru(allIdentifiers => `doi.raw:(${allIdentifiers})`) @@ -64,8 +64,7 @@ [map] path = output -# Envoi de la requete vers le mirroir -text = AV +# Envoi de la requete [map/URLStream] url = https://api.istex.fr/document/ json = true diff --git a/biblio-tools/v1/unpaywall/corhal.ini b/biblio-tools/v1/unpaywall/corhal.ini index 43e120e..6e33d6f 100644 --- a/biblio-tools/v1/unpaywall/corhal.ini +++ b/biblio-tools/v1/unpaywall/corhal.ini @@ -54,7 +54,7 @@ path = input value = self() -# Envoi de la requete vers le mirroir +# Envoi de la requete [URLFetch] url = http://vpunpaywallmir.intra.inist.fr:59700/api/graphql header = env('token').prepend('x-api-key:') diff --git a/biblio-tools/v1/unpaywall/expand.ini b/biblio-tools/v1/unpaywall/expand.ini index a0b90ee..620494f 100644 --- a/biblio-tools/v1/unpaywall/expand.ini +++ b/biblio-tools/v1/unpaywall/expand.ini @@ -54,7 +54,7 @@ path = input value = self() -# Envoi de la requete vers le mirroir +# Envoi de la requete [URLFetch] url = http://vpunpaywallmir.intra.inist.fr:59700/api/graphql header = env('token').prepend('x-api-key:') diff --git a/biblio-tools/v1/unpaywall/is_oa.ini b/biblio-tools/v1/unpaywall/is_oa.ini index b62c73d..d7221f0 100644 --- a/biblio-tools/v1/unpaywall/is_oa.ini +++ b/biblio-tools/v1/unpaywall/is_oa.ini @@ -55,7 +55,7 @@ path = input value = self() -# Envoi de la requete vers le mirroir +# Envoi de la requete [URLFetch] url = http://vpunpaywallmir.intra.inist.fr:59700/api/graphql header = env('token').prepend('x-api-key:') diff --git a/biblio-tools/v1/unpaywall/works/expand.ini b/biblio-tools/v1/unpaywall/works/expand.ini index 726b616..3fd9473 100644 --- a/biblio-tools/v1/unpaywall/works/expand.ini +++ b/biblio-tools/v1/unpaywall/works/expand.ini @@ -57,7 +57,7 @@ path = input value = self() -# Envoi de la requete vers le mirroir +# Envoi de la requete [URLFetch] url = http://vpunpaywallmir.intra.inist.fr:59700/api/graphql header = env('token').prepend('x-api-key:') diff --git a/biblio-tools/v1/wos/works/expand.ini b/biblio-tools/v1/wos/works/expand.ini index 62b3f74..1d542e0 100644 --- a/biblio-tools/v1/wos/works/expand.ini +++ b/biblio-tools/v1/wos/works/expand.ini @@ -18,16 +18,16 @@ post.parameters.0.name = indent post.parameters.0.schema.type = boolean + # Necessary plugins [use] -plugin = @ezs/basics -plugin = @ezs/analytics -plugin = @ezs/storage +plugin = basics # Flow configuration [JSONParse] separator = * +# Quelques paramètres modifiables si besoin [env] path = size value = 10 @@ -42,82 +42,85 @@ path = value value = get('value').toLower() -[expand] -path = value -size = env('size') -cacheName = post-v1-wos-expand -[expand/bufferize] - -# On réalise un mapping dynamique sur le champ value (et on sauvegarde les correspondances trouvées) -[expand/combine] -path = value -default = n/a -primer = get('bufferID') -prepend = buffers -append = transit - -[expand/combine/group] +# Début du traitement par lot +[group] size = env('size') -[expand/combine/replace] -path = dois -value = self().map('value').filter(Boolean).map(x => JSON.stringify(x)).join(' OR ') +# Création d'une requete avec une liste d'identifiants +[replace] +path = output.0.usrQuery +value = self().map('value').filter(Boolean).map(x => JSON.stringify(x)).join(' OR ').thru(allIdentifiers => `DO=(${allIdentifiers})`) -# On crée un objet contenant tous les valeurs nécessaire pour créer une requete -[expand/combine/replace] -path = usrQuery -value = fix('DO=(', self.dois ,')').join('') -path = databaseId +path = output.0.databaseId value = WOK -path = count + +path = output.0.count value = env('size') -path = firstRecord + +path = output.0.firstRecord value = 1 -[expand/combine/URLStream] +path = input +value = self() + +[map] +path = output + +# Envoi de la requete +[map/URLStream] url = https://wos-api.clarivate.com/api/wos/ header = env('token').prepend('X-ApiKey:') path = Data.Records.records.REC.* -timeout = 5000 -noerror = true +json = true +timeout = 30000 +retries = 3 +noerror = false -[expand/combine/OBJFlatten] +# On supprime les réponses qui n'ont pas abouties +[map/remove] +test = get('UID').isEmpty() -[expand/combine/replace] -path = id +[map/OBJFlatten] + +# Création d'un objet similaire à l'objet reponse +[map/replace] +path = __id value = get('dynamic_data/cluster_related/identifiers/identifier').find({ type: 'xref_doi'}).get('value').toLower() path = value value = self() -# On supprime de la table de mapping, les réponses qui n'ont pas abouties -[expand/combine/remove] -test = get('id').isEmpty() +# Reformatage des DOIS (input) +[map] +path = input -# On nettoie l'objet en supprimant les champs temporaires -[expand/exchange] -value = self().omit('bufferID') +[map/replace] +path = __id +value = get('value') -[expand/assign] path = value -value = get('value.value') +value = get('value') -; On supprime uniqument le résulat des documents non trouvés pour -; pour les conserver sans les mettre dans le cache -[expand/swing] -test = get('value.UID').isEmpty() -[expand/swing/exchange] -value = self().omit('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] -; Pour les documents sans résulat -; On donne une valeur par défaut +# Suppression des champs ajoutés +[exchange] +value = self().omit('__id') + +# On marque les réponses qui n'ont pas abouties [swing] test = get('value.UID').isEmpty() + [swing/assign] path = value value = fix('n/a') - [dump] -indent = env('indent') +indent = env('indent', false) +