Skip to content

Commit 3314359

Browse files
authored
Merge pull request mouredev#7138 from danielhdzr/main
Ej: #20 - Python
2 parents 4853f83 + bd8f4aa commit 3314359

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# #20 PETICIONES HTTP
2+
#### Dificultad: Difícil | Publicación: 13/05/24 | Corrección: 20/05/24
3+
4+
## Ejercicio
5+
6+
'''
7+
* EJERCICIO:
8+
* Utilizando un mecanismo de peticiones HTTP de tu lenguaje, realiza
9+
* una petición a la web que tú quieras, verifica que dicha petición
10+
* fue exitosa y muestra por consola el contenido de la web.
11+
*
12+
* DIFICULTAD EXTRA (opcional):
13+
* Utilizando la PokéAPI (https://pokeapi.co), crea un programa por
14+
* terminal al que le puedas solicitar información de un Pokémon concreto
15+
* utilizando su nombre o número.
16+
* - Muestra el nombre, id, peso, altura y tipo(s) del Pokémon
17+
* - Muestra el nombre de su cadena de evoluciones
18+
* - Muestra los juegos en los que aparece
19+
* - Controla posibles errores
20+
'''
21+
import requests
22+
23+
'''
24+
response = requests.get(("https://google.com"))
25+
if response.status_code == 200:
26+
print(response.text)
27+
print("*****Se ha imprimido el codigo fuente de la pagina*****")
28+
else:
29+
print(f"Error: {response.status_code}")
30+
'''
31+
32+
# Extra
33+
34+
pokemon = input("Introduce el nombre o numero del pokemon: ").lower()
35+
# Peticion al sitio web, a la seccion del pokemon elegido
36+
pokedata = requests.get((f"https://pokeapi.co/api/v2/pokemon/{pokemon}/"))
37+
# Si la conexion es exitosa
38+
if pokedata.status_code == 200:
39+
# Guardo los datos json de la web
40+
datos = pokedata.json()
41+
# Extraigo datos de los children correspondientes
42+
print("Nombre: ", datos["name"])
43+
print("Id: ", datos["id"])
44+
print("Peso: ", datos["weight"])
45+
print("Altura: ", datos["height"])
46+
# Para pokemon con mas de un tipo
47+
contador_de_tipos = 1
48+
for type in datos["types"]: # types guarda los tipos como un dict
49+
# donde la key "type" guarda el value que es el "name" del tipo de pokemon
50+
print(f"Tipo({contador_de_tipos}): ", type["type"]["name"])
51+
contador_de_tipos += 1
52+
# Imprime los juegos
53+
print("Juegos:")
54+
# Itera dentro de la etiqueta y extrae lo encontrado
55+
for game in datos["game_indices"]:
56+
print(game["version"] ["name"])
57+
58+
'''
59+
En busca de la cadena de evoluciones del pokemon
60+
'''
61+
# Peticion al sitio web del pokemon de nuevo, en el apartado de species
62+
cadena_evoluciones = requests.get(f"https://pokeapi.co/api/v2/pokemon-species/{pokemon}/")
63+
# Si conexion exitosa
64+
if cadena_evoluciones.status_code == 200:
65+
# Guardo el json, accedo al child "evolucion_chain", y a su grandchild "url"
66+
# Asi obtengo la url de cada pokemon donde se guarda su cadena evolutiva
67+
url = cadena_evoluciones.json()["evolution_chain"]["url"]
68+
# Peticion al url que tiene la cadena evolutiva
69+
response = requests.get(url)
70+
71+
if response.status_code == 200:
72+
# Guardo el json de la url de la cadena de evoluciones
73+
datos = response.json()
74+
# Funcion recursiva para obtener las evoluciones si las hubiera
75+
def get_evolves(datos): # datos guarda el json
76+
print(f"especie y nombre: {datos["species"]["name"]}") # acceder al child y su sub-child
77+
# etiqueta "evolves_to" contiene la evolcion en el json
78+
if "evolves_to" in datos:
79+
'''
80+
Si encuentra "evolves_to" llama a la funcion de nuevo
81+
y trae las evoluciones encontradas dentro de cada evolucion
82+
'''
83+
for evolve in datos["evolves_to"]:
84+
get_evolves(evolve)
85+
# Llamado a la funcion. Parametro es la etiqueta "chain"
86+
get_evolves(datos["chain"])
87+
88+
else:
89+
print(f"Error {response.status_code}: Error con response")
90+
91+
else:
92+
print(f"Error {cadena_evoluciones.status_code}: Error obteniendo cadena evolutiva")
93+
94+
else:
95+
print(f"Error {pokedata.status_code}: Pokemon no encontrado")

0 commit comments

Comments
 (0)