Skip to content

Commit 3ca3996

Browse files
committed
Merge branch 'main' of github.com:adra-dev/roadmap-retos-programacion
2 parents 58f4d6b + 32fae85 commit 3ca3996

File tree

4 files changed

+127
-3
lines changed

4 files changed

+127
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*.iml
55
*.json
66
*.csv
7+
*.zip
78
!stats.json
89
.DS_Store
910
.idea/

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
2828
## Corrección y próximo ejercicio
2929

30-
> #### Lunes 30 de septiembre de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)**
31-
> #### Consulta el **[horario](https://discord.gg/Ak6SdZZ8?event=1285336208586833930)** por país y crea un **[recordatorio](https://discord.gg/Ak6SdZZ8?event=1285336208586833930)**
30+
> #### Lunes 14 de octubre de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)**
31+
> #### Consulta el **[horario](https://discord.gg/juhmSSRF?event=1290376752622993469)** por país y crea un **[recordatorio](https://discord.gg/juhmSSRF?event=1290376752622993469)**
3232
3333
## Roadmap
3434

@@ -74,7 +74,8 @@
7474
|37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[📝](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/python/mouredev.py)|[▶️](https://youtu.be/q-zBKriHupY)|[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/)
7575
|38|[MOUREDEV PRO](./Roadmap/38%20-%20MOUREDEV%20PRO/ejercicio.md)|[📝](./Roadmap/38%20-%20MOUREDEV%20PRO/python/mouredev.py)|[▶️](https://youtu.be/AbGROLoAVLs)|[👥](./Roadmap/38%20-%20MOUREDEV%20PRO/)
7676
|39|[BATMAN DAY](./Roadmap/39%20-%20BATMAN%20DAY/ejercicio.md)|[📝](./Roadmap/39%20-%20BATMAN%20DAY/python/mouredev.py)|[▶️](https://youtu.be/Lmj5enZG5pg)|[👥](./Roadmap/39%20-%20BATMAN%20DAY/)
77-
|40|[FORTNITE RUBIUS CUP](./Roadmap/40%20-%20FORTNITE%20RUBIUS%20CUP/ejercicio.md)|[🗓️ 07/10/24](https://discord.gg/u3R4HUUE?event=1287881476460773456)||[👥](./Roadmap/40%20-%20FORTNITE%20RUBIUS%20CUP/)
77+
|40|[FORTNITE RUBIUS CUP](./Roadmap/40%20-%20FORTNITE%20RUBIUS%20CUP/ejercicio.md)|[📝](./Roadmap/40%20-%20FORTNITE%20RUBIUS%20CUP/python/mouredev.py)||[👥](./Roadmap/40%20-%20FORTNITE%20RUBIUS%20CUP/)
78+
|41|[CAMISETA RAR](./Roadmap/41%20-%20CAMISETA%20RAR/ejercicio.md)|[🗓️ 14/10/24](https://discord.gg/juhmSSRF?event=1290376752622993469)||[👥](./Roadmap/41%20-%20CAMISETA%20RAR/)
7879

7980
## Cursos en YouTube
8081

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import requests
2+
3+
4+
def get_access_token(client_id: str, client_secret: str) -> str:
5+
url = "https://id.twitch.tv/oauth2/token"
6+
params = {
7+
"client_id": client_id,
8+
"client_secret": client_secret,
9+
"grant_type": "client_credentials"
10+
}
11+
response = requests.post(url, params=params)
12+
response.raise_for_status()
13+
return response.json().get("access_token")
14+
15+
16+
def get_user_info(token: str, client_id: str, login: str):
17+
url = "https://api.twitch.tv/helix/users"
18+
headers = {
19+
"Authorization": f"Bearer {token}",
20+
"Client-Id": client_id
21+
}
22+
params = {"login": login}
23+
response = requests.get(url, headers=headers, params=params)
24+
response.raise_for_status()
25+
data = response.json().get("data", None)
26+
27+
if not data:
28+
return None
29+
30+
return data[0]
31+
32+
33+
def get_total_followers(token: str, client_id: str, id: str) -> int:
34+
url = "https://api.twitch.tv/helix/channels/followers"
35+
headers = {
36+
"Authorization": f"Bearer {token}",
37+
"Client-Id": client_id
38+
}
39+
params = {"broadcaster_id": id}
40+
response = requests.get(url, headers=headers, params=params)
41+
response.raise_for_status()
42+
return response.json().get("total", 0)
43+
44+
45+
CLIENT_ID = "mi_client_id"
46+
CLIENT_SECRET = "mi_client_secret"
47+
48+
users = [
49+
"littleragergirl", "ache", "adricontreras4", "agustin51", "alexby11", "ampeterby7", "tvander",
50+
"arigameplays", "arigeli_", "auronplay", "axozer", "beniju03", "bycalitos",
51+
"byviruzz", "carreraaa", "celopan", "srcheeto", "crystalmolly", "darioemehache",
52+
"dheylo", "djmariio", "doble", "elvisayomastercard", "elyas360", "folagorlives", "thegrefg",
53+
"guanyar", "hika", "hiperop", "ibai", "ibelky_", "illojuan", "imantado",
54+
"irinaissaia", "jesskiu", "jopa", "jordiwild", "kenaivsouza", "mrkeroro10",
55+
"thekiddkeo95", "kikorivera", "knekro", "kokoop", "kronnozomberoficial", "leviathan",
56+
"litkillah", "lolalolita", "lolitofdez", "luh", "luzu", "mangel", "mayichi",
57+
"melo", "missasinfonia", "mixwell", "jaggerprincesa", "nategentile7", "nexxuz",
58+
"lakshartnia", "nilojeda", "nissaxter", "olliegamerz", "orslok", "outconsumer", "papigavitv",
59+
"paracetamor", "patica1999", "paulagonu", "pausenpaii", "perxitaa", "nosoyplex",
60+
"polispol1", "quackity", "recuerd0p", "reventxz", "rivers_gg", "robertpg", "roier",
61+
"ceuvebrokenheart", "rubius", "shadoune666", "silithur", "spok_sponha", "elspreen", "spursito",
62+
"bystaxx", "suzyroxx", "vicens", "vitu", "werlyb", "xavi", "xcry", "elxokas",
63+
"thezarcort", "zeling", "zormanworld", "mouredev"
64+
]
65+
users_data = []
66+
not_found_users = []
67+
68+
token = get_access_token(CLIENT_ID, CLIENT_SECRET)
69+
70+
for username in users:
71+
72+
user = get_user_info(token, CLIENT_ID, username)
73+
74+
if user is None:
75+
not_found_users.append(username)
76+
else:
77+
followers = get_total_followers(token, CLIENT_ID, user["id"])
78+
users_data.append({
79+
"username": username,
80+
"created_at": user["created_at"],
81+
"followers": followers
82+
})
83+
84+
sort_by_followers = sorted(
85+
users_data, key=lambda x: x["followers"], reverse=True)
86+
87+
sort_by_date = sorted(
88+
users_data, key=lambda x: x["created_at"])
89+
90+
print("\nRanking por número de seguidores:")
91+
for id, user, in enumerate(sort_by_followers):
92+
print(f"{id + 1} - {user["username"]}: {user["followers"]} seguidores")
93+
94+
print("\nRanking por antigüedad:")
95+
for id, user, in enumerate(sort_by_date):
96+
print(f"{id + 1} - {user["username"]}: Creado el {user["created_at"]}")
97+
98+
if not_found_users:
99+
print("\nUsuarios no encontrados:")
100+
for user in not_found_users:
101+
print(user)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# #41 CAMISETA RAR
2+
> #### Dificultad: Fácil | Publicación: 07/10/24 | Corrección: 14/10/24
3+
4+
## Ejercicio
5+
6+
```
7+
/*
8+
* EJERCICIO:
9+
* ¿Has visto la camiseta.rar?
10+
* https://x.com/MoureDev/status/1841531938961592740
11+
*
12+
* Crea un programa capaz de comprimir un archivo
13+
* en formato .zip (o el que tú quieras).
14+
* - No subas el archivo o el zip.
15+
*/
16+
```
17+
#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap](https://retosdeprogramacion.com/roadmap)**.
18+
19+
Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras.
20+
21+
> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**.

0 commit comments

Comments
 (0)