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