From b34d1de1258959884a0c4ba34e488c27c92dfdfd Mon Sep 17 00:00:00 2001 From: Chetouane <elias.chetouane@univ-grenoble-alpes.fr> Date: Fri, 1 Dec 2023 15:59:32 +0100 Subject: [PATCH] =?UTF-8?q?Script=20pour=20r=C3=A9cup=C3=A9ration=20des=20?= =?UTF-8?q?DOIs=20de=20l'UGA=20depuis=20Datacite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0-collect-data/datacite.py | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 0-collect-data/datacite.py diff --git a/0-collect-data/datacite.py b/0-collect-data/datacite.py new file mode 100644 index 0000000..cb5f3ca --- /dev/null +++ b/0-collect-data/datacite.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[1]: + + +# récupérer les DOIs de l'UGA depuis Datacite +## 2023-12-01, Elias Chetouane + + +# In[12]: + + +""" +## todo +- recherche par affiliation contributeurs ? + +## Documentation +* Doc générale API Datacite : https://support.datacite.org/docs/api +* Recherche d'un DOI : https://support.datacite.org/docs/api-sampling +* Pagination : https://support.datacite.org/docs/pagination +""" + + +# In[13]: + + +import requests, json + + +# In[14]: + + +# requête url de base +url = 'https://api.datacite.org/dois?affiliation=true&query=creators.affiliation.affiliationIdentifier:"https://ror.org/02rx3b187"&page[size]=100' + +# obtenir les résultats de la première page +req = requests.get(url) +results = [req.json()] + +# obtenir les résultats de chaque page dans la liste results +nb_pages = results[0]["meta"]["totalPages"] +page = 1 +while(page < nb_pages): + url = (results[page-1]["links"]["next"]) + req = requests.get(url) + results.append(req.json()) + page += 1 + + +# In[15]: + + +# ajouter les DOIs dans une liste, sans ajouter les résultats qui ne sont pas des DOIs + +dois = [] +not_dois = [] +nb_dois = 0 + +# prendre en compte les résultats de chaque page +for res in results: + num_dois = res["data"] + nb_dois += len(num_dois) + + for item in num_dois : + doi = item["id"] + if item.get("type") != "dois": + print("Le résultat " + str(item) + " est de type " + item.get("type") + " : " + doi) + not_dois.append(doi) + else: + dois.append(doi) + +print("Nombre de résultats trouvés : " + str(nb_dois)) + + +# In[43]: + + +# exporter la liste de DOI au format txt + +with open("datacite-dois.txt", 'w') as f : + [f.write(f"{line}\n") for line in dois] + -- GitLab