diff --git a/biblio-tools/v1/unpaywall/corhal.ini b/biblio-tools/v1/unpaywall/corhal.ini index 549928b..da78d05 100644 --- a/biblio-tools/v1/unpaywall/corhal.ini +++ b/biblio-tools/v1/unpaywall/corhal.ini @@ -21,13 +21,12 @@ # Necessary plugins [use] plugin = basics -plugin = analytics -plugin = storage # Flow configuration [JSONParse] separator = * +# Quelques paramètres modifiables si besoin [env] path = size value = 10 @@ -38,55 +37,50 @@ path = token value = env('UNPAYWALL_API_KEY') +path = fields +value = fix('') + + +# Passage des doi en minuscule pour être compatible unpaywall [assign] path = value value = get('value').toLower() -# Pour traiter par lot on groupe puis on utilise spawn qui crée un buffer par lot +# Début du traitement par lot [group] size = env('size') -[spawn] -[spawn/ungroup] -[spawn/bufferize] +# Création d'une requete graphql avec une liste de DOI +[replace] +path = request.query +value = self().map('value').map(x => JSON.stringify(x)).join(',').thru(allIdentifiers => `{GetByDOI(dois:[${allIdentifiers}]){doi,is_oa,oa_status,has_repository_copy,oa_locations{host_type,is_best,license,url,url_for_landing_page,url_for_pdf,version}}}`) -# 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-corhal +path = input +value = self() -[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 tous les valeurs nécessaire pour créer une requete -[spawn/combine/replace] -path = query -value = fix('{GetByDOI(dois:[', self.dois, ']){doi,is_oa,oa_status,has_repository_copy,oa_locations{host_type,is_best,license,url,url_for_landing_page,url_for_pdf,version}}}').join('') - -text = graphql.input -[spawn/combine/URLStream] -;url = https://unpaywall.inist.fr/api/graphql +# Envoi de la requete vers le mirroir +[URLFetch] url = http://vpunpaywallmir.intra.inist.fr:59700/api/graphql header = env('token').prepend('x-api-key:') -path = data.GetByDOI.* -timeout = 30000 +path = request +json = true +target = output +timeout = 5000 +retries = 3 noerror = false -# On supprime les réponses qui n'ont pas abouties -[spawn/combine/drop] -path = is_oa +# Reformatage des résulats (output) +[map] +path = output.data.GetByDOI -# On créé l'object attendu par combine { id, value } pour faire le mapping -[spawn/combine/replace] -path = id +# Suppression des réponses qui n'ont pas abouties +[map/remove] +test = has('is_oa') +reverse = true + +# Création d'un objet reponse +[map/replace] +path = __id value = get('doi').toLower() path = value.is_oa @@ -101,17 +95,31 @@ path = value.oa_locations value = get('oa_locations') +# Reformatage des DOIS (input) +[map] +path = input -# On nettoie l'objet en supprimant les champs temporaires -[spawn/exchange] -value = self().omit('bufferID') +# Création d'un objet similaire à l'objet reponse +[map/replace] +path = __id +value = get('value') -# On simplifie la structure -[assign] path = value -value = get('value.value', self.value) +value = self() -# On marque les réponses qui n'ont pas abouties +[debug] +# Croissements des resultats et des dois (avec le champ __id comme clé) +[exchange] +value = get('output.data.GetByDOI').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 abouti [swing] test = has('value.is_oa') reverse = true @@ -122,3 +130,7 @@ [dump] indent = env('indent') + + + + diff --git a/biblio-tools/v1/unpaywall/expand.ini b/biblio-tools/v1/unpaywall/expand.ini index 6ef6d5d..0f5b364 100644 --- a/biblio-tools/v1/unpaywall/expand.ini +++ b/biblio-tools/v1/unpaywall/expand.ini @@ -21,13 +21,12 @@ # Necessary plugins [use] plugin = basics -plugin = analytics -plugin = storage # Flow configuration [JSONParse] separator = * +# Quelques paramètres modifiables si besoin [env] path = size value = 10 @@ -38,54 +37,50 @@ path = token value = env('UNPAYWALL_API_KEY') +path = fields +value = fix('') + + +# Passage des doi en minuscule pour être compatible unpaywall [assign] path = value value = get('value').toLower() -# Pour traiter par lot on groupe puis on utilise spawn qui crée un buffer par lot +# Début du traitement par lot [group] size = env('size') -[spawn] -[spawn/ungroup] -[spawn/bufferize] +# Création d'une requete graphql avec une liste de DOI +[replace] +path = request.query +value = self().map('value').map(x => JSON.stringify(x)).join(',').thru(allIdentifiers => `{GetByDOI(dois:[${allIdentifiers}]){doi, is_oa, oa_status, has_repository_copy, best_oa_location { host_type }}}`) -# 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-expand +path = input +value = self() -[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 tous les valeurs nécessaire pour créer une requete -[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('') - -[spawn/combine/URLStream] -;url = https://unpaywall.inist.fr/api/graphql +# Envoi de la requete vers le mirroir +[URLFetch] url = http://vpunpaywallmir.intra.inist.fr:59700/api/graphql header = env('token').prepend('x-api-key:') -path = data.GetByDOI.* +path = request +json = true +target = output timeout = 5000 +retries = 3 noerror = false -# On supprime les réponses qui n'ont pas abouties ( -[spawn/combine/drop] -path = is_oa +# Reformatage des résulats (output) +[map] +path = output.data.GetByDOI -# On créé l'object attendu par combine { id, value } pour faire le mapping -[spawn/combine/replace] -path = id +# Suppression des réponses qui n'ont pas abouties +[map/remove] +test = has('is_oa') +reverse = true + +# Création d'un objet reponse +[map/replace] +path = __id value = get('doi').toLower() path = value.is_oa @@ -100,15 +95,30 @@ path = value.has_repository_copy value = get('has_repository_copy', 'n/a') -# On nettoie l'objet en supprimant les champs temporaires -[spawn/exchange] -value = self().omit('bufferID') +# Reformatage des DOIS (input) +[map] +path = input -# On simplifie la structure -[assign] +# Création d'un objet similaire à l'objet reponse +[map/replace] +path = __id +value = get('value') + path = value -value = get('value.value', self.value) -# On marque les réponses qui n'ont pas abouties +value = get('value') + +# Croissements des resultats et des dois (avec le champ __id comme clé) +[exchange] +value = get('output.data.GetByDOI').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 abouti [swing] test = has('value.is_oa') reverse = true diff --git a/biblio-tools/v1/unpaywall/works/expand.ini b/biblio-tools/v1/unpaywall/works/expand.ini index a6b2ada..0459011 100644 --- a/biblio-tools/v1/unpaywall/works/expand.ini +++ b/biblio-tools/v1/unpaywall/works/expand.ini @@ -19,17 +19,17 @@ post.parameters.0.schema.type = boolean # Rétablissons la coloration syntaxique (une ou deux apostrophes selon les besoins): ' +value = fix('').join('') # Necessary plugins [use] plugin = basics -plugin = analytics -plugin = storage # Flow configuration [JSONParse] separator = * +# Quelques paramètres modifiables si besoin [env] path = size value = 10 @@ -40,65 +40,77 @@ path = token value = env('UNPAYWALL_API_KEY') +path = fields +value = fix('') + + +# Passage des doi en minuscule pour être compatible unpaywall [assign] path = value value = get('value').toLower() -# Pour traiter par lot on groupe puis on utilise spawn qui crée un buffer par lot +# Début du traitement par lot [group] size = env('size') -[spawn] -[spawn/ungroup] -[spawn/bufferize] +# Création d'une requete graphql avec une liste de DOI +[replace] +path = request.query +value = self().map('value').map(x => JSON.stringify(x)).join(',').thru(allIdentifiers => `{GetByDOI(dois:[${allIdentifiers}]){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}}}`) -# 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 +path = input +value = self() -[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 +# Envoi de la requete vers le mirroir +[URLFetch] url = http://vpunpaywallmir.intra.inist.fr:59700/api/graphql header = env('token').prepend('x-api-key:') -path = data.GetByDOI.* +path = request +json = true +target = output timeout = 5000 +retries = 3 noerror = false -# On supprime les réponses qui n'ont pas abouti -[spawn/combine/drop] -path = is_oa +# Reformatage des résulats (output) +[map] +path = output.data.GetByDOI -# On crée l'object attendu par combine { id, value } pour faire le mapping -[spawn/combine/assign] -path = id +# Suppression des réponses qui n'ont pas abouties +[map/remove] +test = has('is_oa') +reverse = true + +# Création d'un objet similaire à l'objet reponse +[map/replace] +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) +value = self() + +# 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.data.GetByDOI').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 abouti [swing] test = has('value.is_oa')