12.02.2023
статья
Я создал погодное приложение

Hello world, с вами VladosNX! Сегодня я создал консольное погодное приложение. Но в этой статье я также расскажу, как сделать также. Летс гоу!

Суть приложения проста: при запуске оно обращается к серверу погоды и получает информацию, а потом выводит все на экран. Выглядит это вот так:
image(я тестировал на Linux).
Причем вне зависимости от того сколько информации будет выведено на экран, "палки" справа не поменяют свое положение. Как это сделать, я тоже расскажу. Скачать приложение

Показывать больше нечего, но я расскажу как сделать свое погодное приложение!
Популярные сервисы, например Яндекс Погода, используют свои метеостанции, чего нету у обычного программиста. Но можно воспользоваться специальными сервисами, которые имеют свой API для создания подобных приложений. Один из них - wttr.in.
Если мы просто отправим запрос на этот сервер, то мы уже увидим оформленный и красивый ответ. Выглядит он так:
imageКрасиво, да? А вот как отправить такой запрос:

import requests
response = requests.get('https://wttr.in')
print(response.text)

import requests  - подключение встроенной библиотеки. Она нужна для отправки запроса.
response = requests.get('https://wttr.in') - отправка запроса на нужный адрес.
print(response.text) - вывод полученной информации.
Ах да, я не рассказал что такое запрос.
Когда мы заходим на любой сайт, компьютер делает запрос к веб-серверу сайта. В запросе указана информация о компьютере и браузере. К слову она может быть и ложной, в зависимости от браузера, но IP-адрес можно подменить только с помощью VPN. Сервер тоже дает нам немного информации о себе, вместе с которой мы получаем требуемую страницу.
Данный погодный сервис очень продвинутый. В адресе можно указать много параметров, например использовать другую единицу измерения. Но нас интересует другой параметр - format. В нем можно изменить вид ответа. Их существует очень много, но нам нужно получить JSON, обработав который можно вывести информацию о погоде в таком виде, в каком хотим мы сами. Давайте посмотрим на ответ, который мы получим, когда попросим дать JSON-ответ.
Изменим адрес и напишем https://wttr.in?format=j1 вместо https://wttr.in. И мы получим очень много непонятной для человека информации в JSON-формате. Сейчас наша задача - обработать ответ. Для этого немного усложним код:

import requests
import json

response = requests.get ('[https://wttr.in?format=j1](https://wttr.in?format=j1)')
info = json.loads(response.text)

print(f"Temp: {info['current_condition'][0]['temp_C']}")

import json - импортирует встроенную библиотеку для работы с JSON
info = json.loas(response.text) - обрабатывает JSON и преобразует его в словарь
print(f"Temp: {info['current_condition'][0]['temp_C']}") - вывод информации.
При запуске скрипта мы получим температуру.
Самое непонятное - ['current_condition'][0]['temp_C']. Это указывает на то, что нам нужна именно температура. Есть очень много значений. Вот некоторые из них:
['current_condition'][0]['windspeedKmph'] - Скорость ветра (км/ч)
['current_condition'][0]['pressure'] - давление
['current_condition'][0]['humidity'] - влажность
['current_condition'][0]['weatherDesc'][0]['value'] - солнечно, пасмурно и т. д.  Надеюсь, понятно объяснил.

А теперь как я и обещал, расскажу как сделать рамку.
Для начала печатаем пустую рамку:

print(' ___________________ ')
print('|                   |')
print('|                   |')
print('|                   |')
print('|                   |')
print('|-------------------|')
# ...

Теперь переместим курсор на несколько строк вверх. Это можно сделать, написав \x1b[A

# ...
print('\x1b[A\x1b[A\x1b[A\x1b[A', end='')
# ...

Теперь просто печатаем нужную инфу:

# ...
print('| информация')
print('| информация')
# ...

Чтобы остальная часть рамки не перезаписывалась, напечатаем пару пустых строк:

# ...
print('\n')

И профит - все работает!

Ну а на этом все, надеюсь у вас все получилось, всем удачи и всем пока!