Рубрики
Без рубрики

Как я использовал данные отслеживания COVID для создания приложения, ориентированного на события и узнайте больше Python 🤓

Этот пост блога показывает, как я использовал с открытым исходным потоком COVID данных для изучения Python с использованием библиотеки Paho-MQTT. Теги с Python, начинающими, Covid19, Showdev.

TL; DR – я построил приложение Python Event, используемое публично доступное в реальном времени потока обновлений данных COVID-19 с использованием Broker Pubsub Pubsub + в качестве инфраструктуры обмена сообщениями. Проверьте исходный код в этом репо Github под Образцы/Питон

Solacelabs/Covid19-поток-процессоры

Поток информации и пример приложений для обработки JHU и COVIDTRACKING.COM COVID-19 DATA, доступные в виде потоков над утешением

Фу! Теперь, когда TL; доктор слон в комнате уходит с дороги, давайте доберемся до ядра 🐘

Прямо сейчас с ситуацией, когда мир в настоящее время находится, некоторые из нас, вероятно, думают «Хм, что я могу сделать, чтобы вернуться в общество? Если я не могу напрямую вносить что-то, что я могу научиться во время карантина, чтобы полировать мои навыки и в то же время построить что-то полезное? «Я не знаю о вас, но я определенно усилил свои навыки выпечки с количеством банановых хлебов, которые я испеченных (и ел). Помимо выпечки, я взял эту ситуацию как возможность узнать новые технологии и иметь что-то относительно реализовать его на (I.e. Covid). Я выбрал Python в качестве языка программирования, чтобы узнать и дополнить все то, что я знаю в архитектурах, ориентированных на события.

В предыдущем сообщении в блоге я обсудил, как я построил приложение Nodejs, управляемое событиями в реальном времени потоков данных COVID-19. Я также охватил какой-то опыт на том, что такое, ориентированное на события, почему это важно и как использовать шаблон обмена сообщениями публикации/подписки для подхода к приложению здания и приложения EDA, поэтому я рекомендую прочитать его, если вы еще не 🤗. Если JavaScript/Nodejs не ваша чашка чая, то беспокойтесь не! В этом blogpost я буду делиться тем, как я использовал Python 🐍 для создания простого приложения для ведения событий, используя те же потоки данных COVID-19 с теми же тремя основными требованиями.

Прежде чем создать любое приложение и работать над проектом, я начну с разработкой моего дизайна архитектуры, разные инструменты для использования и языка программирования, мне нужно успешно получить MVP вверх и бежать. С таким подходом я буду использовать следующий технический стек:

  1. Язык программирования : Питон
  2. Протокол обмена сообщениями : MQTT
  3. Сообщение брокера : Polece Pubsub +
  4. Источник данных : Данные COVID-19, предоставленные приложением издателя согласно Эта документация Отказ

Обратите внимание, что в моем технологическом стеке я не перечислял никаких API для отдыха или архитектуры клиента/сервера 🤝. Следующий!

Чтобы настроить мою среду Python, я буду использовать VirtualenV. В двух словах Virtualenv – это инструмент, используемый для изоляции среды Python, создавая структуру каталогов, инкапсулирующую все установленные пакеты, которые вам нужны в приложении, которое вы строите. Таким образом, вы не будете загрязнять ваши глобальные пакеты Python с чем-либо, требующим вашим приложением. Вы можете прочитать больше об этом здесь А по тому, почему это рекомендуемый подход для развития Python.

Примечание. Если вы пришли с фона Nodejs, подумайте с точки зрения Node_Modules.

В новом терминале выполните следующую команду, чтобы создать новый каталог для вашего проекта, настроить виртуальную среду Python и активировать ее:

mkdir covid_python && cd "$_" && virtualenv env && source env/bin/activate

Теперь установите Paho-MQTT Пакет Python:

pip install paho_mqtt

Создать новый COVID.PY Файл и инициализируйте его со следующим:

import paho.mqtt.client as mqtt

# Solace Broker Info
url = "mr2r9za6fwi0wf.messaging.solace.cloud"
username = "covid-public-client"
password = "covid19"

def on_connect(client, data, flags, rc):
    assert (rc == 0), "Error Connecting. Return code: " + str(rc)
    print("Connected to the COVID PubSub+ Solace Broker!")


client = mqtt.Client()
client.username_pw_set(username=username, password=password)

client.on_connect = on_connect

client.connect(url)
client.loop_forever()

То, что вы сделали выше, импортирует Paho-MQTT Пакет и инициализировал клиент MQTT с использованием параметров конфигурации.

Важно отметить следующее:

  • client.loop_forever () Является ли функция блокировки, которая обрабатывает сетевой трафик, отправленные обратные вызовы и обрабатывает переподключение. Вы можете прочитать больше о других функциях Loop * () в главной Страница документации Отказ

  • .on_connect Является ли функция, вызванная, когда брокер отвечает на наш запрос на связи. Мы назначаем этот обратный вызов для on_connect (клиент, userdata, флаги, RC) Функция, которая будет выполняться при успешной связи.

Теперь у вас есть выходной скелет, чтобы проверить нашу связь. От вашего терминала выполнить следующее

python covid.py

Вы должны увидеть Подключен к COVID Pubsub + Broker Broker! на вашем терминале. Количество! Соединение установлено 🎉. Чтобы остановить выполнение программы, нажмите CMD + C (или Ctrl + C Если вы плаваете в домене Windows).

3. Обрабатывать события

Для обработки входящих сообщений от Pubsub + Broker в действие в основе событий, мы должны сначала подписаться на интересующую тему (в соответствии с «Доступными темами ) и обрабатывать сообщения со вторым типом функции обратного вызова: .on_message Отказ

import paho.mqtt.client as mqtt

def on_connect(client, data, flags, rc):
    assert (rc == 0), "Error Connecting. Return code: " + str(rc)
    print("Connected to the COVID PubSub+ Solace Broker!")

    for t in topics:
        print("Subscribing to: " + t)
        client.subscribe(t)

def on_message(client, data, msg):
    print("Received message on: %s\n %s" % (msg.topic, msg.payload.decode('ascii')))

# Broker Info
url = "mr2r9za6fwi0wf.messaging.solace.cloud"
username = "covid-public-client"
password = "covid19"

topics = [
    "jhu/csse/covid19/test/cases/+/update/Canada/Ontario/#",
    "com/covidtracking/states/current/update/New York",
]

client = mqtt.Client()
client.username_pw_set(username=username, password=password)

client.on_connect = on_connect
client.on_message = on_message

client.connect(url)
client.loop_forever()

В приведенной выше программе кода:

  • Я добавил on_message (клиент, данные, MSG) Функция для обработки .on_message. Обратный вызов от клиента. Обратите внимание на декодирование полученной полезной нагрузки в ASCII, поскольку мы получаем полезную нагрузку в двоичном формате.
  • Есть подписки на два разных тем
    1. Все случаи обновления в Онтарио, Канада, полученные из источника данных Университета Джона Хопкинса. Я использовал тестовый поток.
    2. Все случаи обновлений в Нью-Йорке, полученные из источника данных проекта COVID Tracking. Примечание. Вы можете использовать тему COM/COVIDTRACKING/ШОС/Текущий/Получить/RAW получить необработанные обновления от всех штатов в Соединенных Штатах

Запустите код и дождитесь появления обновлений!

Примечание на JSON

Поскольку возвращенный формат полезной нагрузки сообщения находится в JSON, вы можете использовать пакет Python JSON для обработки, манипулирования и Украсить Ваш выход. Вот полный код для вашего приложения

import paho.mqtt.client as mqtt
import json

def on_connect(client, data, flags, rc):
    assert (rc == 0), "Error Connecting. Return code: " + str(rc)
    print("Connected to the COVID PubSub+ Solace Broker!")

    for t in topics:
        print("Subscribing to: " + t)
        client.subscribe(t)

def on_message(client, data, msg):
    msg_json_object = json.loads(msg.payload.decode('ascii'))
    msg_json_pretty = json.dumps(msg_json_object, indent=2)
    print("Received message on: %s\n %s" % (msg.topic, msg_json_pretty))

# Broker Info
url = "mr2r9za6fwi0wf.messaging.solace.cloud"
username = "covid-public-client"
password = "covid19"

topics = [
    "jhu/csse/covid19/test/cases/+/update/Canada/Ontario/#",
    "com/covidtracking/states/current/update/New York",
]

client = mqtt.Client()
client.username_pw_set(username=username, password=password)

client.on_connect = on_connect
client.on_message = on_message

client.connect(url)
client.loop_forever()

Я хотел бы исследовать больше внешних каркасов, которые я могу использовать в сочетании с Python. Таким образом, в идеале у меня будет общаться с Python Application Comment с Broker Solace Pubsub + Broker в качестве Backend Piece Application Infrastructure и прохладной передней панелью, чтобы представить ее. Эй, что случилось Джанго?

Так вот реальный вопрос, что вы узнали во время карантина? Поделитесь в комментариях ниже и давайте начнем обсуждение!

О, и если у вас есть какие-либо рекомендации для фреймворков передней части, я бы хотел 👀, что у вас есть и 👂 ваши предложения.

И закончить хорошую ноту, я бы хотел оставить вас с одним из моих любимых GIFS

Оригинал: “https://dev.to/solacedevs/how-i-used-covid-tracking-data-to-build-and-learn-a-python-event-driven-application-1l44”