Создадим программу, которая будет присылать не интерактивное всплывающее уведомление, показывающее актуальный курс биткоина к доллару.
15К открытий15К показов
Десктопное уведомление — это всплывающее на рабочем столе сообщение, которое оповещает о каком-либо событии.
Компьютер может прислать вам уведомление по множеству причин, не обязательно связанных с вашей текущей деятельностью: обновление ПО, новое сообщение в мессенджере, низкий заряд батареи и многое другое.
Наиболее подходящий вариант для уведомлений, которые не нуждаются в немедленной реакции пользователя, — это не интерактивное всплывающее уведомление.
Сегодня мы создадим программу, которая будет присылать такие уведомления.
Больше информации об уведомлениях в Linux можно найти в документации Gnome и в документации Arch Linux.
Подготовка
Для отправки уведомлений нам понадобится пакет для языка Python notify2, который можно установить с помощью команды pip install notify2.
Создаем Crypto-Notifier
Давайте напишем инструмент, который будет сообщать текущий курс биткоина к доллару.
Весь процесс работы программы можно разбить на три шага:
Сбор данных для отображения.
Инициализация инструмента отправки уведомлений.
Отображение данных во всплывающем уведомлении.
Сбор данных
Для получения текущего курса биткоина к доллару нам нужно извлечь данные с CoinGecko. Поскольку этот сайт не предоставляет API-интерфейса, нам необходимо получить данные из чистого HTML. Мы сделаем это с помощью библиотеки BeautifulSoup.
Нужные нам данные находятся в тегах
и
. Структура страницы показана на скриншоте ниже:
Создадим файл с названием rates.py и поместим в него следующий код:
from bs4 import BeautifulSoup
import requests
def fetch_bitcoin():
# URL с актуальным курсом
url = "https://www.coingecko.com/en/price_charts/bitcoin/usd"
headers = {'User-Agent': 'Mozilla/5.0'}
bitcoin_file = requests.get(url)
# Создаем soup-объект
soup = BeautifulSoup(bitcoin_file.text, "html.parser")
bitcoin_li = []
# Извлекаем необходимые данные из тегов
for table in soup.find_all("table", attrs={"class" : "table table-responsive mt-2"}):
for td in table.find_all("td"):
bitcoin_li.append(td.text)
del bitcoin_li[3:]
# Убираем ненужные символы из элементов списка
bitcoin_li = map(lambda s : s.strip(), bitcoin_li)
return bitcoin_li
Здесь мы определили функцию, которая возвращает детали курса в форме списка после извлечения информации по заданному url.
После получения необходимой для отображения информации нам нужно инициализировать инструмент отправки push-уведомлений, как показано ниже:
import notify2
import rates
def notify():
ICON_PATH= "полный путь до иконки"
# Получаем текущий курс
bitcoin = rates.fetch_bitcoin()
# Инициализируем d-bus соединение
notify2.init("Cryptocurrency rates notifier")
# Создаем Notification-объект
n = notify2.Notification("Crypto Notifier", icon = ICON_PATH)
# Устанавливаем уровень срочности
n.set_urgency(notify2.URGENCY_NORMAL)
# Устанавливаем задержку
n.set_timeout(1000)
Давайте пройдемся по коду шаг за шагом:
Прежде чем мы сможем отправлять какие-либо уведомления, нам нужно инициализировать D-Bus соединение. D-Bus — механизм общения между процессами (IPC), который программы под Linux используют, чтобы взаимодействовать друг с другом. Чтобы отобразить уведомление, наша программа должна подключиться через D-Bus к процессу, управляющему системным интерфейсом, и передать ему информацию об уведомлении, такую как его заголовок, текст и значок. Подробнее про то, как это устроено, можно почитать на официальном сайте, но в библиотеке notify2, которую мы используем, всё это уже реализовано. Единственное, что мы должны сделать — вызвать функцию notify2.init(), передав ей имя нашей программы, чтобы notify2 смогла установить и инициализировать подключение к D-Bus:
notify2.init("Средство уведомления о курсе криптовалют")
Затем мы создаем объект уведомлений:
n = notify2.Notification("Crypto Notifier", icon = ICON_PATH)
Haystack — новая IDE, которая предлагает визуальный подход к работе с кодовой базой. Она превращает код в визуальный граф на холсте и использует ИИ для автоматизации рутинных задач. Инструмент интегрируется с VSCode, поддерживает сохранение рабочих пространств и ускоряет процессы разработки.