From 81509effa25b7da760f3f8001e36d7bd4b108a28 Mon Sep 17 00:00:00 2001 From: Chetouane <elias.chetouane@univ-grenoble-alpes.fr> Date: Fri, 1 Dec 2023 16:00:31 +0100 Subject: [PATCH] =?UTF-8?q?Script=20pour=20r=C3=A9cup=C3=A9ration=20des=20?= =?UTF-8?q?DOIs=20de=20l'UGA=20depuis=20RDG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0-collect-data/rdg.py | 118 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 0-collect-data/rdg.py diff --git a/0-collect-data/rdg.py b/0-collect-data/rdg.py new file mode 100644 index 0000000..fc95b66 --- /dev/null +++ b/0-collect-data/rdg.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[2]: + + +# Récupérer les DOIs de l'UGA depuis Rechrche Data Gouv +## 2023-12-01, Elias Chetouane + + +# In[3]: + + +""" +## todo +/ + +## Documentation +* Noms des champs à requêter : https://entrepot.recherche.data.gouv.fr/api/metadatablocks/citation +* Doc API Dataverse : https://guides.dataverse.org/en/5.12.1/api/search.html + +## Remarques +- Problème : certaines affiliations renseignent la ville, mais le labo n'est pas affilié à l'UGA. Cela les fait apparaitre alors qu'il ne faudrait pas les prendre en compte... +- Obligation de cherche Greoble et UGA car champ libre, donc parfois l'affiliation à l'UGA est renseignée par UGA et parfois Univ Greoble Alpes +- Adapter une fois mise en place du ROR +""" + + +# In[4]: + + +import requests, json + + +# In[5]: + + +# requetes de base sur chaque champ qui nous intéresse : affiliation du contact, auteurs, producteur et contributeurs +# dans chaque champ, recherche "UGA" ou "Grenoble" +urls = [ + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=datasetContactAffiliation%3AUGA', + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=authorAffiliation%3AUGA', + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=producerAffiliation%3AUGA', + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=contributorAffiliation%3AUGA', + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=datasetContactAffiliation%3AGrenoble', + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=authorAffiliation%3AGrenoble', + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=producerAffiliation%3AGrenoble', + 'https://entrepot.recherche.data.gouv.fr/api/search?q=*&fq=contributorAffiliation%3AGrenoble' + # possiblilité d'ajouter d'autres requêtes + ] + +# on définit une fonction pour la lancer la requete avec chaque url pour les différentes affiliations +def get_results(url): + req = requests.get(url) + results = [req.json()] + + # obtenir les résultats de chaque page dans la liste results + nb_res = results[0]["data"]["count_in_response"] + count = nb_res + page = 1 + while(nb_res > 0): + newurl = url+"&start="+str(count) + req = requests.get(newurl) + results.append(req.json()) + nb_res = results[page]["data"]["count_in_response"] + count += nb_res + page += 1 + return results + + +# In[6]: + + +# on crée une fonction pour ajouter les DOIs dans une liste + +def get_dois(results): + dois = [] + nb_dois = 0 + + # prendre en compte les résultats de chaque page + for res in results: + num_dois = res["data"]["items"] + nb_dois += len(num_dois) + + for item in num_dois : + dois.append(item["global_id"]) + + print("Nombre de résultats trouvés : " + str(nb_dois)) + return dois + + +# In[ ]: + + +# on récupère les dois + +dois = [] + +for url in urls: + dois += get_dois(get_results(url)) + +# on supprime les doublons + +for i in dois: + while(dois.count(i) > 1): + dois.remove(i) + +print("Nombre de dois différents trouvés : " + str(len(dois))) + + +# In[8]: + + +# exporter la liste de DOI au format txt + +with open("rdg-dois.txt", 'w') as f : + [f.write(f"{line[4:]}\n") for line in dois] # [4:] pour retirer "doi:" au début de chaque ligne + -- GitLab