У нас есть рабочий процесс, чтобы получить температуру шара влажного термометра (WBGT), регулярно отправляя кого-нибудь с датчиком для снятия показаний. Этот процесс требует времени и усилий, а датчик есть не у всех. К счастью, на Data.gov.sg доступны необработанные данные, представленные в формате JSON.

Итак, я хотел создать автоматический сценарий, чтобы сообщить WBGT в реальном времени для моего рабочего места в Чанги. Сначала я попытался создать его в Excel, так как он был легко доступен и мог обрабатывать таблицы для поиска необработанных данных по существующей диаграмме. Это оказалось довольно сложно, так как я не мог заставить Excel работать с JSON с моими ограниченными навыками. Затем я попытался заставить Excel загрузить веб-страницу и напрямую скопировать результаты в ячейки, но страница не хотела взаимодействовать с Excel. Посмотри, что у меня получилось.

Затем у меня возникла идея написать сценарий в MATLAB, поскольку мои сценарии Thesis были написаны на них, и они могли легко работать с таблицами. Однако я остановился на Python, так как он должен справиться с чем угодно. Учитывая, что я никогда не писал скриптов на Python, я очень рад, что мне удалось это сделать за два часа.

Сценарий напечатает текущую температуру и относительную влажность (RH) в Чанги, если API вернет данные со станции Чанги. В противном случае он напечатает «Данные Changi недоступны», что и произошло в этом примере. Имея текущую температуру и относительную влажность, я мог бы получить показания WBGT из таблицы преобразования. Я сохранил таблицу в Excel, поэтому мне нужно, чтобы мой сценарий читал в таблице, округлял необработанные данные, а затем находил нужную строку и столбец.

Все идет нормально. Но я понял, что последние рассылаемые данные часто не включают данные Чанги. Плохой сценарий, который дает вам то, что вы хотите, только в 15–20% случаев. Так что я смотрел файл JSON целый день. И вот что у меня получилось.

Файл должен иметь какую-то структуру. Затем я получил ответ от Firefox.

Просматривая необработанные данные, я обнаружил, что проблема была не только в станции Чанги. Мне кажется, что сервер будет выталкивать данные при получении данных с метеостанций, но частота не синхронизируется. Так что, возможно, после сбора данных с 3 станций, данные будут отправлены в API. Таким образом, последняя запись JSON содержит данные только с этих трех станций. После некоторых проб и ошибок мне всегда удавалось получать самые свежие данные по Чанги, заставляя скрипт искать последние данные со станции Чанги. Чтобы убедиться, что данные не слишком старые, мой скрипт также возвращал мне время сбора данных.

Ура! Но как я могу заставить это работать для всех? Скрипты Python бесполезны, если вы не можете их запустить. Если вы не являетесь другим разработчиком, вам не захочется устанавливать Python IDE. Любые файлы * .exe автоматически считаются вирусами, так что это тоже бесполезно. Сначала я подумал о создании приложения для iOS, так как это то, что я использую. Но случайный разговор с коллегой по работе заставил меня сосредоточиться на разработке веб-приложения, к которому можно получить доступ с любого устройства, подключенного к Интернету.

Поискав ответ в Google, я обнаружил, что Flask - это фреймворк для легкого веб-приложения. Идеально подходит для простого проекта, который я хотел быстро реализовать. Оказывается, мне пришлось запрограммировать страницы в HTML, чтобы он работал. Что ж, мне удалось заставить его немного поработать, украшение придет позже. Мне также сначала пришлось заставить его работать на виртуальном сервере на моем компьютере. Все это заняло у меня еще 2 ночи или около того, и когда это случилось ...

Потрясающий! Затем следует запускать веб-приложение в Интернет. Обдумывая эту проблему, я наткнулся на Pythonanywhere и загрузил свой скрипт, чтобы убедиться, что он работает. Он не вышел из коробки, так как читал таблицу Excel несколько иначе. (Я понял, что некоторые редакторы нумеруют строки, беря первый столбец данных, но некоторые этого не делают.) После дополнительных усилий скрипт работал, как рекламировалось. Тогда я мог бы сосредоточиться на продвижении веб-приложения в онлайн.

Работа с Flask на Pnythonanywhere заняла больше времени, чем предыдущие проблемы, так как мне казалось, что мне чего-то не хватает. Наконец я наткнулся на ответ. По какой-то причине переименование моего файла в __init__.py помогло.

Теперь, когда я смог заставить свое веб-приложение работать, я решил, что бесплатная учетная запись Pythonanywhere мне не поможет. Мое имя пользователя xxxxxxxx.pythonanywhere.com не сообщает людям о функциях этого приложения. Мне нужно было что-то получше. Еще я хотел попробовать свои силы в администрировании реального домена. Быстрый поиск нужного URL в Google ничего не нашел, что было отличной новостью. Есть несколько регистраторов для доменов * .sg, я решил остановиться на Exabytes.

И вот я теперь счастливый обладатель WBGT.sg. Затем мне пришлось обновить свою учетную запись с помощью Pythonanywhere, чтобы я мог использовать с ней свой домен. После этого появляется механика связывания доменного имени с веб-серверами. Pythonanywhere использует CNAME, и мне потребовалось некоторое время, чтобы понять, как направить мой домен на серверы PA. Понадобилась еще одна ночь повозок, и наконец мы живы!

Как вы понимаете, мое приложение теперь может предоставлять информацию WBGT на большем количестве станций, чем только на Changi. Чанги - это всего лишь одна из метеостанций, поскольку доступны данные для очень многих других станций, зачем ограничивать их только Чанги? Итак, я ввел идентификаторы станций и позволил пользователю выбрать интересующую его станцию.

Это результат во всей красе, когда пользователь выбирает станцию ​​«S122» и нажимает «Пуск». Информация там есть, но, как видите, интерфейс абсолютно простой. Следующими шагами будет представление информации со всех станций на одной странице и выделение соответствующей информации. Над дизайном главных страниц тоже нужно много доработки.

Тем не менее, я очень рад, что эта страница теперь активна. Показатель посещаемости пока довольно низкий, так как я думаю, что мало кто знает об этом сайте. Я также еще не проиндексировал сайт в Google, что, как я считаю, увеличит посещаемость. На данный момент я думаю, что WBGT.sg будет полезен людям, которые работают на открытом воздухе, или их менеджерам, которые должны заботиться об их благополучии. Обязательно заходите на сайт почаще и позвольте своим ребятам больше отдыхать, когда WBGT показывает КРАСНЫЙ или ЧЕРНЫЙ!