Skip to content

Instantly share code, notes, and snippets.

@and-semakin
Last active November 26, 2022 02:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save and-semakin/1e999af221df36afbeec5909a413081a to your computer and use it in GitHub Desktop.
Save and-semakin/1e999af221df36afbeec5909a413081a to your computer and use it in GitHub Desktop.
Awesome weather script

Скрипт, показывающий погоду

Для запуска нужно иметь Python 3.6+ и установленные зависимости:

pip install -r requirements.txt

Ещё для запуска нужен API-ключ к сервису OpenWeatherMap. Смотрите инструкцию в файле weather.py.

После этого можно запускать:

python weather.py

Скрипт написан для статьи про requirements.txt в блоге.

import sys
from pyowm import OWM
from pyowm.exceptions.api_response_error import UnauthorizedError
# Чтобы получить свой собственный ключ для доступа к API OWM:
# 1. зарегистрируйся на https://openweathermap.org/;
# 2. сгенерируй ключ здесь: https://home.openweathermap.org/api_keys
# 3. поменяй значение в строке ниже:
API_key = "4c33cfde42a4602e802c83078d931683"
owm = OWM(API_key, language="ru")
try:
owm.is_API_online()
except UnauthorizedError:
print("Упс! Кажется, ключ доступа к API OpenWeatherMap неправильный!")
print(f"Вставь правильный токен в {__file__}!")
sys.exit(1)
city_name = input("Введи название своего города (на английском): ")
reg = owm.city_id_registry()
variants = reg.ids_for(city_name)
if len(variants) == 1:
city_id = variants[0][0]
else:
while True:
try:
print("Какой именно город?")
for i, (_, variant_city, variant_country) in enumerate(variants):
print(f"{i}) {variant_city}, {variant_country}")
# здесь может возникнуть ValueError
choice = int(input("Введи номер варианта (число): "))
# здесь может возникнуть IndexError
city_id = variants[choice][0]
# если ошибок не возникло, то выходим из бесконечного цикла
break
except (ValueError, IndexError):
print("Не понял тебя! Давай попробуем еще раз!")
obs = owm.weather_at_id(city_id)
w = obs.get_weather()
t = w.get_temperature(unit="celsius")["temp"]
status = w.get_status()
print(f"Сегодня у тебя {t}℃, а в целом дела обстоят вот так: {status}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment