Чтобы избежать фальшивых новостей о Коронавирусе, вы можете создать скрипт на Python, который позволит вам быть в курсе последних событий.
Чтобы быть в курсе распространения коронавируса (COVID-19) в районе вашего проживания, я решил показать вам, как получить данные. и отображать уведомление Windows 10 с помощью python и некоторых библиотек.
Планирование процесса
«Планирование превращает будущее в настоящее, чтобы вы могли что-то с этим сделать прямо сейчас». Аллан Лэйкейн
Во-первых, мы должны найти надежный веб-сайт , который предлагает необходимые нам данные. Я решил использовать для этого проекта Мировомеры.
Веб-сайт предоставляет нам готовые наборы данных с разными данными в виде столбцов и разными странами в виде строк.
Поэтому нам нужно найти и отфильтровать веб-элементы, чтобы получить данные, чтобы затем отобразить их в уведомлениях.
Настройка среды
Сначала нам нужно установить Python и добавить его в PATH:
Затем нам нужно установить 3 библиотеки:
- win10toast: библиотека Python для отображения всплывающих уведомлений Windows 10.
- bs4: библиотека Python для извлечения данных из файлов HTML и XML.
- Запросы: элегантная и простая библиотека HTTP для Python
Для установки откройте командную строку (CMD) и введите следующие команды:
Откройте Командную строку (CMD) и введите эти команды для установки следующих пакетов Python:
pip install win10toast
pip install bs4
pip install
requests
Теперь мы готовы начать кодирование.
Кодирование
Принесите кофе, и давайте начнем с создания нового скрипта Python и импорта всех необходимых пакетов:
from win10toast import ToastNotifier from bs4 import BeautifulSoup import requests import time
затем мы создадим и инициализируем несколько переменных:
Переменная : type: role
country
: str: название вашей страныnotification_duration
: int: время отображения уведомления (в секундах)refresh_time
: int: временной интервал между двумя уведомлениями (в минутах)
woldmetersLink
: str: URL-адрес worldmeters.
country = "Tunisia" notification_duration = 10 refresh_time = 10 #minutes worldmetersLink = "https://www.worldometers.info/coronavirus/"
теперь давайте получим веб-страницу:
try: html_page = requests.get(worldmetersLink) except requests.exceptions.RequestException as e: print(e) #ConnectionError continue
Теперь давайте проверим веб-страницу и получим данные. Мы видим, что таблица находится внутри div
tag, все данные внутри tbody
tag, а информация о каждой стране находится внутри tr -> td
.
Итак, иерархия: div -> tbody -> tr -> td
Итак, мы используем селектор CSS для поиска тегов, соответствующих этим классам CSS (div, tbody, tr, td):
search = bs.select("div tbody tr td")
Затем мы используем метод get_text()
, чтобы получить текст (название страны) под тегами, затем мы используем find()
, который позволяет нам извлечь самый первый элемент, удовлетворяющий нашему ограничению - название страны.
start = -1 for i in range(len(search)): if search[i].get_text().find(country) !=-1: start = i break
Затем мы сохраняем данные, которые находятся между тегами, в массиве:
data = [] for i in range(1,8): try: data += [search[start+i].get_text()] except: data += [0]
Теперь нам нужно сгенерировать str, который содержит сообщение уведомления:
message = "Total infected = {}, New Case = {}, Total Deaths = {}, New Deaths = {}, Recovred = {}, Active Case = {}, Serious Critical = {}".format(*data)
Пришло время использовать наш модуль win10toast, мы начнем с создания объекта для класса ToastNotifier:
toaster = ToastNotifier()
затем мы используем функцию show_toast, которая принимает в качестве параметров:
title: содержит заголовок уведомления.
message: содержит уведомление.
продолжительность : Указывает активную продолжительность уничтожения уведомлений.
icon_path: содержит путь к ICO-файлу. (это необязательно) (я использовал значок, вы можете найти его в «репозитории Github).
#toaster.show_toast(title, notification message, duration, icon) toaster.show_toast("Coronavirus in {}".format(country) , message, duration = notification_duration , icon_path ="icon.ico")
И последнее, но не менее важное: мы помещаем наш код в бесконечный цикл:
While True : #our code
и добавьте эту строку в конец цикла, чтобы обновить программное обеспечение:
time.sleep(refresh_time * 60) #parameter in seconds
Очистка кода
Давайте посмотрим на результат для country = «China»:
Итак, мы видим, что мы успешно зафиксировали данные, но они плохо отформатированы, мы видим «+», случайные пробелы и «,».
Давайте очистим наш массив. Фактически, data = ['80, 824 ',' +11 ',' 3,189 ',' +13 ', '65, 573', '12,062', '3,610'] или мы хотим более чистую версию, чтобы мы собираемся изменить его на: data = ['80 .824 ',' 11 ',' 3.189 ',' 13 ', '65 .573', '12 .062 ',' 3.610 ']
from:
data = ['80 , 824 ',' + 11 ',' 3 , 189, + 13, 65 , 573, 12 062, 3 , 610] < br /> на:
data = ['80 .824 ',' 11 ',' 3.189 ',' 13 ', '65 .573', '12 .062 ',' 3.610 ']
Мы собираемся добавить функцию с именем data_cleanup, которая принимает массив без очистки в качестве параметра и очищает его.
Давайте создадим функцию для очистки массива (ее параметр - это массив без очистки). Мы назовем это функцией data_cleanup
. Помните, что определение функции всегда начинается с def
, за которым следует имя функции, круглые скобки (parameter)
и двоеточие :
.
Напоминание: Python Stringstrip()
Method: удалите пробелы в начале и в конце строки:
def data_cleanup(array): L = [] for i in array: i = i.replace("+","") i = i.replace("-","") i = i.replace(",",".") if i == "": i = "0" L.append(i.strip()) return L
Итак, результат:
# " +3,420 " >>> "3.420"
Теперь нам просто нужно использовать эту функцию перед созданием сообщения:
data= data_cleanup(data)
Готовый продукт
Давайте посмотрим окончательные результаты на:
- Страна = Китай
2. Страна = Тунис
И вуаля
Вот полный исходный код:
Я запаковал скрипт в EXE-файл. Вы можете найти исполняемый файл в репозиториях git.
Обновлять
Если вы хотите отображать уведомление, только если значения массива изменились. Мы можем добавить новую переменную (список) data_check
, инициализировать data_check=[]
и заменить time.sleep
(последняя строка ) к :
if data_check!= data: data_check = data toaster = ToastNotifier() toaster.show_toast("Coronavirus {}".format(country) , message, duration = notification_duration , icon_path ="icon.ico") else: time.sleep(refresh_time*60) continue
поэтому окончательный код после добавления этой функции выглядит так:
Последнее слово
В конце я хотел бы напомнить вам, что нужно быть в безопасности и помнить, что профилактика лучше лечения.
Спасибо за чтение! 😄