diff --git a/0-collect-data/datacite.py b/0-collect-data/datacite.py index 5d9f3cdcd87a81a7f077278eaf97b7b489f5e312..0941c3ff2901beec5c7f63aa765fdbf3c4ce4d70 100644 --- a/0-collect-data/datacite.py +++ b/0-collect-data/datacite.py @@ -3,7 +3,6 @@ """ ## todo -- recherche par affiliation contributeurs ? - v2 : périmètre UGA : ajouter les ROR des unités, des établissements/laboratoires associés (par exemple Grenoble INP) ## Documentation @@ -12,47 +11,65 @@ * Pagination : https://support.datacite.org/docs/pagination """ -import requests, json +import requests -# requête url de base -url = 'https://api.datacite.org/dois?affiliation=true&query=creators.affiliation.affiliationIdentifier:"https://ror.org/02rx3b187"&page[size]=100' +urls = [ + 'https://api.datacite.org/dois?affiliation=true&query=creators.affiliation.affiliationIdentifier:"https://ror.org/02rx3b187"&page[size]=100', + 'https://api.datacite.org/dois?affiliation=true&query=contributors.affiliation.affiliationIdentifier:"https://ror.org/02rx3b187"&page[size]=100' + # possibilité d'ajouter d'autres requêtes +] -# 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"]) +# 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.append(req.json()) - page += 1 + 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 + return results + +# on crée une fonction pour ajouter les DOIs dans une liste, sans ajouter les résultats qui ne sont pas des DOIs +def get_dois(results): + dois = [] + not_dois = [] + + # prendre en compte les résultats de chaque page + for res in results: + num_dois = res["data"] -# ajouter les DOIs dans une liste, sans ajouter les résultats qui ne sont pas des 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) + return dois, not_dois + +# on récupère les 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 url in urls: + doi, not_doi = get_dois(get_results(url)) + dois += doi + not_dois += not_doi + +# on supprime les doublons - 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) +unique_dois = list(set(dois)) -print("Nombre de résultats trouvés : " + str(nb_dois)) +print("Nombre de dois différents trouvés : " + str(len(unique_dois))) # 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] + [f.write(f"{line}\n") for line in unique_dois] diff --git a/0-collect-data/rdg.py b/0-collect-data/rdg.py index 84ec29903104abb34d677bf159212b96f9f03a04..78fac16ca45783b5162308ac92774e4467361fd6 100644 --- a/0-collect-data/rdg.py +++ b/0-collect-data/rdg.py @@ -15,7 +15,7 @@ - Adapter une fois mise en place du ROR """ -import requests, json +import requests # requetes de base sur chaque champ qui nous intéresse : affiliation du contact, auteurs, producteur et contributeurs # dans chaque champ, recherche "UGA" ou "Grenoble" @@ -29,7 +29,7 @@ urls = [ '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):