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
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)
|