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