|
| 1 | +# 20 - Python |
| 2 | +# |
| 3 | +# EJERCICIO: |
| 4 | +# Utilizando un mecanismo de peticiones HTTP de tu lenguaje, realiza |
| 5 | +# una petición a la web que tú quieras, verifica que dicha petición |
| 6 | +# fue exitosa y muestra por consola el contenido de la web. |
| 7 | +# |
| 8 | +# DIFICULTAD EXTRA (opcional): |
| 9 | +# Utilizando la PokéAPI (https://pokeapi.co), crea un programa por |
| 10 | +# terminal al que le puedas solicitar información de un Pokémon concreto |
| 11 | +# utilizando su nombre o número. |
| 12 | +# - Muestra el nombre, id, peso, altura y tipo(s) del Pokémon |
| 13 | +# - Muestra el nombre de su cadena de evoluciones |
| 14 | +# - Muestra los juegos en los que aparece |
| 15 | +# - Controla posibles errores |
| 16 | +# |
| 17 | + |
| 18 | +import requests |
| 19 | +from bs4 import BeautifulSoup as bs |
| 20 | +import json |
| 21 | + |
| 22 | +class Counter: |
| 23 | + def __iter__(self): |
| 24 | + self.a = 1 |
| 25 | + return self |
| 26 | + |
| 27 | + def __next__(self): |
| 28 | + x = self.a |
| 29 | + self.a += 1 |
| 30 | + return x |
| 31 | + |
| 32 | +def serparacion(cadena) -> str: |
| 33 | + global contador |
| 34 | + print(f'\nEjercicio {next(contador)}. {cadena * 20}') |
| 35 | + |
| 36 | +def ejercicio() -> None: |
| 37 | + serparacion("_:_") |
| 38 | + web = requests.get("https://www.as.com") |
| 39 | + if web.status_code == 200: |
| 40 | + testweb = bs(web.text, features="lxml") |
| 41 | + print(testweb) |
| 42 | + |
| 43 | +def extra() -> None: |
| 44 | + serparacion("_:_") |
| 45 | + # Busqueda recurente fases evolucion |
| 46 | + def rev_poke_chain(chain) -> list: |
| 47 | + test = [] |
| 48 | + if type(chain) == list: |
| 49 | + for menta in chain: |
| 50 | + chain = menta |
| 51 | + if "evolves_to" in chain.keys() and len(chain["evolves_to"]) != 0: |
| 52 | + test = rev_poke_chain(chain["evolves_to"]) |
| 53 | + test.append(chain["species"]["name"]) |
| 54 | + return test |
| 55 | + |
| 56 | + while True: |
| 57 | + print("\nPor favor inserta el nº o el nombre del Pokemon que quieres buscar.\nInserta 0 para salir.") |
| 58 | + search_pokemon = input("ID/Nombre: ") |
| 59 | + if search_pokemon == "0": |
| 60 | + break |
| 61 | + pokeapi = requests.get(f"https://pokeapi.co/api/v2/pokemon/{search_pokemon}/") |
| 62 | + if pokeapi.status_code == 200: |
| 63 | + search_pokemon_info = json.loads(pokeapi.text) |
| 64 | + poke_form = search_pokemon_info["forms"] |
| 65 | + for element in poke_form: |
| 66 | + try: |
| 67 | + poke_name = element["name"] |
| 68 | + except: |
| 69 | + pass |
| 70 | + poke_number = search_pokemon_info["id"] |
| 71 | + poke_height = search_pokemon_info["height"] |
| 72 | + poke_weight = search_pokemon_info["weight"] |
| 73 | + poke_game_indices = search_pokemon_info["game_indices"] |
| 74 | + poke_game_name=[] |
| 75 | + for element in poke_game_indices: |
| 76 | + version = element["version"] |
| 77 | + poke_game_name.append(version["name"]) |
| 78 | + |
| 79 | + poke_weight = (poke_weight * 0.453592) |
| 80 | + poke_height = (poke_height * 2.54) |
| 81 | + print(f'\nEl Pokemon {poke_name.upper()} es el id {poke_number}, tiene una altura de {poke_height:n} cm y un peso de {poke_weight:n} kilos.') |
| 82 | + print(f'El Pokemon {poke_name.upper()} aparede en los juegos {poke_game_name}') |
| 83 | + pokeapi2 = requests.get(f"https://pokeapi.co/api/v2/pokemon-species/{search_pokemon}/") |
| 84 | + search_pokemon_info2 = json.loads(pokeapi2.text) |
| 85 | + evol_chain = search_pokemon_info2["evolution_chain"] |
| 86 | + pokeapi3 = requests.get(evol_chain["url"]) |
| 87 | + search_pokemon_evol = json.loads(pokeapi3.text) |
| 88 | + poke_chain = search_pokemon_evol["chain"] |
| 89 | + chain = rev_poke_chain(poke_chain) |
| 90 | + print(f'El Pokemon {poke_name.upper()} tiene la siguiente cadena de evolucion {chain}.\n') |
| 91 | + |
| 92 | + elif pokeapi.status_code >= 400 and pokeapi.status_code <= 499: |
| 93 | + print('\nProbablemente el Pokemon no existe o no está registrado, prueba con otro.') |
| 94 | + elif pokeapi.status_code >= 500 and pokeapi.status_code <= 599: |
| 95 | + print('\nNo se puede proceder con la solicitud por problemas con el servidor.') |
| 96 | + else: |
| 97 | + print('\nError desconocido, prueba con otro.') |
| 98 | + |
| 99 | +def main() -> None: |
| 100 | + ejercicio() |
| 101 | + extra() |
| 102 | + |
| 103 | +contador = iter(Counter()) |
| 104 | +if __name__ == "__main__": |
| 105 | + main() |
0 commit comments