You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

68 lines
2.5 KiB

#pip install requests colorama termcolor
import requests
from colorama import Fore, Style, init
import json
#inicializace barev z colorama
init(autoreset=True)
# klíč najdete na https://home.openweathermap.org/api_keys
API_KEY = "cdcbb82b14e8e3e85117686c68e19a5b"
def ziskej_pocasi(mesto):
"""
Funkce pošle požadavek a vrátí slovník (json) s informacemi
"""
#& = AltGR + C
url1 = "https://api.openweathermap.org/data/2.5/weather"
url2 = f"?q={mesto}&appid={API_KEY}&units=metric&lang=cz"
url = url1 + url2
print(f"Otevírám: {url}")
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
return data
except requests.exceptions.HTTPError:
return "Město nebylo nalezeno. Zkontroluj překlepy"
except Exception as e:
return f"Chyba: {e}"
#podmínka jestli je skript spuštěný jako samostatný skript a ne jako knihovna
if __name__ == "__main__":
print(Fore.CYAN + "--- OpenWeatherMap bot ---")
print("Tento bot ti zjistí aktualní počasí v libovolném městě (možná i vesnici) na světě")
if API_KEY == "API_KLIC":
print(Fore.RED + "\nPOZOR: Musíš do proměnné API_KEY vložit svůj klíč!!!")
exit()
while True:
mesto_input = input(Fore.YELLOW + "\nZadej název města (nebo 'q' pro konec): ").strip()
if mesto_input.lower() in ["q","konec","exit","quit"]:
print("Děkujeme za použití bota")
break
if mesto_input:
print(f"Zjištuji počasí pro {mesto_input}")
vysledek = ziskej_pocasi(mesto_input)
print("-"*30)
#pokud vysledek je slovník (čitelný JSON v pythonu) tak máme data o počasí
if isinstance(vysledek,dict):
# nezapomenout na `import json`
# print(json.dumps(vysledek,indent=4,ensure_ascii=False))
teplota = vysledek["main"]["temp"]
pocitova_teplota = vysledek["main"]["feels_like"]
popis = vysledek["weather"][0]["description"]
vlhkost = vysledek["main"]["humidity"]
print(f"Město: {Fore.GREEN}{vysledek['name']}")
print(f"Počasí: {Fore.BLUE}{popis}")
print(f"Teplota: {Fore.RED}{teplota}°C")
print(f"Pocitová Teplota: {pocitova_teplota}°C")
print(f"Vlhkost vzduchu: {vlhkost}%")
else:
print(Fore.RED + vysledek)
print("-"*30)