1
+ #! /bin/python3.11
2
+ # Autor: Héctor Adán
3
+ # GitHub: https://github.com/hectorio23
4
+ import http .client
5
+ import json
6
+
7
+ '''
8
+ * EJERCICIO
9
+ * Utilizando un mecanismo de peticiones HTTP de tu lenguaje, realiza
10
+ * una petición a la web que tú quieras, verifica que dicha petición
11
+ * fue exitosa y muestra por consola el contenido de la web.
12
+ *
13
+ * DIFICULTAD EXTRA (opcional):
14
+ * Utilizando la PokéAPI (https://pokeapi.co), crea un programa por
15
+ * terminal al que le puedas solicitar información de un Pokémon concreto
16
+ * utilizando su nombre o número.
17
+ * - Muestra el nombre, id, peso, altura y tipo(s) del Pokémon
18
+ * - Muestra el nombre de su cadena de evoluciones
19
+ * - Muestra los juegos en los que aparece
20
+ * - Controla posibles errores
21
+ '''
22
+
23
+ ##################################################
24
+ ################## EJERCICIO #####################
25
+ ##################################################
26
+
27
+ HOSTNAME = 'www.python.org'
28
+
29
+ # Se crea una instancia de HTTPSConnection
30
+ connection = http .client .HTTPSConnection (
31
+ host = HOSTNAME , # Pagina de la documentacion de Python
32
+ )
33
+
34
+ # Se realiza la peticion al servidor
35
+ connection .request (method = 'GET' , url = "/" )
36
+
37
+ # Se obtiene el resultado de la peticion
38
+ response = connection .getresponse ()
39
+
40
+ # Devuelve '+' si el status code se encuentra entre el rango 200 - 299 los cuales son códigos de exito
41
+ print (f"[{ '+' if 200 <= response .code < 300 else '-' } ] Peticion al servidor { HOSTNAME } retornó un código { response .code } " )
42
+ print ("Respuesta en binario: \n " )
43
+ if 200 <= response .code < 300 : print (response .read ())
44
+
45
+
46
+ ##################################################
47
+ ################ EJERCICIO EXTRA #################
48
+ ##################################################
49
+
50
+ import http .client
51
+
52
+ poke_name_id = input ("\n Ingrese el nombre/id de tu pokemon favorito: " ).lower ()
53
+
54
+ poke_conn = http .client .HTTPSConnection ("pokeapi.co" )
55
+ poke_conn .request ("GET" , f"/api/v2/pokemon/{ poke_name_id } " )
56
+ poke_resp = poke_conn .getresponse ()
57
+ poke_data = poke_resp .read ().decode ("utf-8" )
58
+
59
+ if poke_resp .code == 200 :
60
+ poke_json = json .loads (poke_data )
61
+ poke_name = poke_json ["name" ].upper ()
62
+ poke_id = poke_json ["id" ]
63
+ poke_weight = poke_json ["weight" ] / 10
64
+ poke_height = poke_json ["height" ] / 10
65
+ poke_types = [typ ["type" ]["name" ].capitalize () for typ in poke_json ["types" ]]
66
+ poke_evo_url = poke_json ["species" ]["url" ]
67
+ poke_games = [entry ["version" ]["name" ] for entry in poke_json ["game_indices" ]]
68
+
69
+ poke_conn .request ("GET" , poke_evo_url )
70
+ evo_resp = poke_conn .getresponse ()
71
+ evo_data = evo_resp .read ().decode ("utf-8" )
72
+
73
+ if evo_resp .code == 200 :
74
+ evo_json = json .loads (evo_data )
75
+ if "chain" in evo_json and evo_json ["chain" ]:
76
+ poke_evo_chain = [evo_poke ["species" ]["name" ].capitalize () for evo_poke in evo_json ["chain" ]["evolves_to" ]]
77
+ else :
78
+ poke_evo_chain = [poke_name ]
79
+
80
+ print (f"Nombre del pokemom: { poke_name } " )
81
+ print (f"ID: { poke_id } " )
82
+ print (f"Peso del pokemon: { poke_weight } kg" )
83
+ print (f"Altura: { poke_height } mts" )
84
+ print (f"Tipo(s): { ', ' .join (poke_types )} " )
85
+ print (f"Cadena de evolución: { ' -> ' .join (poke_evo_chain )} " )
86
+ print (f"Aparece en los juegos: { ', ' .join (poke_games )} " )
87
+ else :
88
+ print ("Error al obtener datos de la cadena de evolución" )
89
+ else :
90
+ print ("Error al obtener datos del Pokémon" )
0 commit comments