Hello world, с вами VladosNX! Сегодня я создал консольное погодное приложение. Но в этой статье я также расскажу, как сделать также. Летс гоу!
Суть приложения проста: при запуске оно обращается к серверу погоды и получает информацию, а потом выводит все на экран. Выглядит это вот так:
(я тестировал на Linux).
Причем вне зависимости от того сколько информации будет выведено на экран, "палки" справа не поменяют свое положение. Как это сделать, я тоже расскажу. Скачать приложение
Показывать больше нечего, но я расскажу как сделать свое погодное приложение!
Популярные сервисы, например Яндекс Погода, используют свои метеостанции, чего нету у обычного программиста. Но можно воспользоваться специальными сервисами, которые имеют свой API для создания подобных приложений. Один из них - wttr.in.
Если мы просто отправим запрос на этот сервер, то мы уже увидим оформленный и красивый ответ. Выглядит он так:
Красиво, да? А вот как отправить такой запрос:
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')
И профит - все работает!
Ну а на этом все, надеюсь у вас все получилось, всем удачи и всем пока!