Чтобы избежать фальшивых новостей о Коронавирусе, вы можете создать скрипт на Python, который позволит вам быть в курсе последних событий.

Чтобы быть в курсе распространения коронавируса (COVID-19) в районе вашего проживания, я решил показать вам, как получить данные. и отображать уведомление Windows 10 с помощью python и некоторых библиотек.

Планирование процесса

«Планирование превращает будущее в настоящее, чтобы вы могли что-то с этим сделать прямо сейчас». Аллан Лэйкейн

Во-первых, мы должны найти надежный веб-сайт , который предлагает необходимые нам данные. Я решил использовать для этого проекта Мировомеры.

Веб-сайт предоставляет нам готовые наборы данных с разными данными в виде столбцов и разными странами в виде строк.

Поэтому нам нужно найти и отфильтровать веб-элементы, чтобы получить данные, чтобы затем отобразить их в уведомлениях.

Настройка среды

Сначала нам нужно установить Python и добавить его в PATH:

Затем нам нужно установить 3 библиотеки:

  1. win10toast: библиотека Python для отображения всплывающих уведомлений Windows 10.
  2. bs4: библиотека Python для извлечения данных из файлов HTML и XML.
  3. Запросы: элегантная и простая библиотека 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

Теперь давайте проверим веб-страницу и получим данные. Мы видим, что таблица находится внутри divtag, все данные внутри tbodytag, а информация о каждой стране находится внутри 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)

Готовый продукт

Давайте посмотрим окончательные результаты на:

  1. Страна = Китай

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

поэтому окончательный код после добавления этой функции выглядит так:

Последнее слово

В конце я хотел бы напомнить вам, что нужно быть в безопасности и помнить, что профилактика лучше лечения.

Спасибо за чтение! 😄

Хелифи Ахмед Азиз