1
+ """
2
+ /*
3
+ * EJERCICIO:
4
+ * GitHub ha publicado el Octoverse 2024, el informe
5
+ * anual del estado de la plataforma:
6
+ * https://octoverse.github.com
7
+ *
8
+ * Utilizando el API de GitHub, crea un informe asociado
9
+ * a un usuario concreto.
10
+ *
11
+ * - Se debe poder definir el nombre del usuario
12
+ * sobre el que se va a generar el informe.
13
+ *
14
+ * - Crea un informe de usuario basándote en las 5 métricas
15
+ * que tú quieras, utilizando la informración que te
16
+ * proporciona GitHub. Por ejemplo:
17
+ * - Lenguaje más utilizado
18
+ * - Cantidad de repositorios
19
+ * - Seguidores/Seguidos
20
+ * - Stars/forks
21
+ * - Contribuciones
22
+ * (lo que se te ocurra)
23
+ */
24
+ """
25
+
26
+ import requests
27
+ from collections import defaultdict
28
+
29
+ base_url = "https://api.github.com/users/"
30
+
31
+ def get_user_info (username ):
32
+
33
+ user_data = requests .get (base_url + username ).json ()
34
+
35
+ if "status" in user_data and user_data ["status" ] == "404" :
36
+ return None
37
+ else :
38
+ return user_data
39
+
40
+ def get_info_basic (data ):
41
+
42
+ print (f"Name: { data .get ('name' , 'No name' )} " )
43
+ print (f"Company: { data .get ('company' , 'No company' )} " )
44
+ print (f"Total de repos: { data .get ('public_repos' , 0 )} " )
45
+ print (f"Followers: { data .get ('followers' , 0 )} " )
46
+ print (f"Following: { data .get ('following' , 0 )} " )
47
+
48
+ def get_info_repos (repos_url ):
49
+ ## Esta peticion se puede paginar si el usuario
50
+ ## tiene muchos repositorios
51
+ repos_data = requests .get (repos_url ).json ()
52
+ my_langauges = defaultdict (int )
53
+
54
+ for repo in repos_data :
55
+ lang = repo .get ("language" , "No language" )
56
+ my_langauges [lang ] += 1
57
+ print (f'\n Repo: { repo .get ("full_name" , "No name" )} ' )
58
+ print (f'Stars: { repo .get ("stargazers_count" , 0 )} ' )
59
+ print (f'Forks: { repo .get ("forks_count" , 0 )} ' )
60
+
61
+ most_lang = sorted (my_langauges .items (),
62
+ key = lambda x : x [1 ],
63
+ reverse = True )[0 ][0 ]
64
+
65
+ print (f"\n Lenguajes utilizados: { most_lang } " )
66
+ if __name__ == "__main__" :
67
+
68
+ username = input ("Introduce el nombre de usuario de GitHub: " )
69
+ user_info = get_user_info (username )
70
+
71
+ if user_info != None :
72
+ print (f"Informe para el usuario: { username } " )
73
+ get_info_basic (user_info )
74
+ repos_url = user_info ["repos_url" ]
75
+ get_info_repos (repos_url )
76
+
77
+ else :
78
+ print (f"El usuario { username } no existe" )
0 commit comments