Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Récupérer les DOIs de l'UGA présents dans Nakala
## 2023-11-29, Maxence Larrieu
"""
# Particularités
- pas de données d'affiliations, on passe directement par les comptes des déposants qui nous ont été fournis par l'équipe HumaNum
- réponse de l'API dans la navigateur en XML et via requets en json
## Process
- charger les userid
- itérer sur tous les userid
- récupérer les DOIs de tous leurs dépôts
- exlure les actions de création de collection
- extra : recherche aussi de nouveau utilisateurs par l'intémédiaire des droits des dépôts effectués
## question sur le périmètre
- périmètre : est-ce qu'on inclut des personnels comme Thomas Leduc (univ. nantes) mais membre AAU ?
"""
def get_dois_n_users(user_id):
"""
attention logique d'utilisateurs (=compte nakala), pas d'auteur
extrait les DOIs déposées par un user dans Nakala (les collections sont exclues)
user_network : ressortir des userId avec qui les déposant ont partagés des droits de modif. sur leurs dépôts
"""
buffer_dois = []
other_users = []
url_req = "https://api.nakala.fr/search?order=relevance&page=1&size=25&fq=depositor="
req = requests.get(url_req + user_id)
## filtre si la requete n'aboutie pas
if req.status_code != 200 :
return{
"continue" : False,
"content" : r,
"other_users" : False
}
res = req.json()
# iterer sur tous les résultats
for item in res["datas"] :
## exclure les collections, qui ne contiennes pas d'élement "files"
if not item.get("files") :
continue
# récupérer le DOI
buffer_dois.append( item.get("identifier") )
# rechercher d'autres userId
if item.get("rights") :
## pour toutes les personnes à qui on a ajouté des droits
for person in item["rights"] :
## récupérer leurs userid
person_userid = person.get("username")
## si on trouve un autre utilisateurs
if person_userid and person_userid not in nakala_uga_users and person_userid not in other_users :
other_users.append( person_userid )
return{
"continue" : True,
"content" : buffer_dois,
"other_users" : other_users
}
import json, requests
## list to stock datas
nakala_uga_users = []
all_dois = []
other_user_finded = []
with open('nakala-uga-users.txt', 'r') as f:
## attention bien stripper quand on import du txt sinon les sauts de ligne sont présents
[nakala_uga_users.append( user.strip() ) for user in f.readlines()]
print("\tnb nakala users loaded", len(nakala_uga_users))
# ____n____ iterer sur les users uga
for user in nakala_uga_users :
## rechercher les jeux de données
res = get_dois_n_users(user)
if res["continue"] :
## ajouter les DOIs trouvés
if len(res["content"]) > 0 :
all_dois += res["content"]
## ajouter les personnes
if len(res["other_users"]) > 0 :
#print(f"\nnew person {','.join(res['other_users'])}")
other_user_finded += [x for x in res["other_users"] ]
## ____n____ exporter les DOI au format txt
with open("nakala-dois.txt", 'w') as fh :
## print les autres utilisateurs trouvés
if other_user_finded :