Skip to content
Snippets Groups Projects
Commit ca197325 authored by Elias Chetouane's avatar Elias Chetouane
Browse files

simplifications + ajout recherche dois par affiliation de contributeur pour datacite

parent f7fbe6c0
No related branches found
No related tags found
No related merge requests found
......@@ -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]
......@@ -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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment