Google-apps-script

Track Coronavirus (Covid-19) случаи в Индии с листами Google

Правительство Индии веб-сайт имеет живую приборную панель, которая обеспечивает в прямом эпоху в режиме реального времени, количество случаев коронавируса (COVID-19) в различных государствах Индии. Это лучший ресурс, чтобы получать обновления вокруг активных случаев Covid-19 в Индии.

Tracker Covid-19 для Индии

Официальный веб-сайт предоставляет текущие данные, но если вы должны были проверить, как количество подтвержденных случаев увеличилось в Индии со временем, нет исторических данных. Вот почему я построил трекер COVID-19 с листами Google.
Трекер собирает данные с официального сайта каждые несколько минут и использует Sparklines, чтобы помочь вам визуализировать, как вспышка коронавируса распространяется в Индии с течением времени. Правительство активно публикует отчеты с 10 марта, и все данные также доступны через Google Sheet.

COVID-19 JSON API

Если вы разработчик, я также опубликовал данные в виде JSON API, который предоставит вам последние данные о случаях COVID-19 по штатам, которые доступны на веб-сайте Министерства здравоохранения и социального обеспечения Индии.

Как работает трекер COVID-19

Coronavirus Tracker написан на скрипте Google Apps и использует триггеры, основанные на времени, для извлечения чисел с веб-сайта mohfw.gov.in каждые несколько минут.
/**
* Scrape the homepage of mohfw.gov.in (Ministry of Health, India)
* website for latest numbers on Coronavirus positive cases in India
*/

const scrapeMOHWebsite = () => {
const url = "https://www.mohfw.gov.in/";
const response = UrlFetchApp.fetch(url);
const content = response.getContentText();
return content.replace(/[\r\n]/g, "");
};

Скрипт Google Apps не поддерживает парсеры HTML, такие как Cheerio, поэтому нам пришлось быстро создать его с нуля, используя регулярное выражение. Он захватывает HTML-содержимое страницы, ищет тег table и затем извлекает данные из отдельных ячеек таблицы.
Если они изменит макет веб-сайта, этот парсер может сломаться.
/**
* Parse the webpage content and extract numbers from the HTML
* table that contains statewise data on Covid-19 Cases in India
*/

const getCurrentCovid19Cases = (json = true) => {
const states = {};
const html = scrapeMOHWebsite();
const [table] = html.match(/

(.+)<\/div>/);
const rows = table.match(/

(.+?)<\/tr>
/g
);
rows.forEach((row) => {
const cells = row
.match(/(.+?)<\/td>/g)
.map((cell) => cell.replace(/<.+?>/g, ""));
const [, stateName, indianNationals, foreignNationals] = cells;
if (/[a-z\s]/i.test(stateName)) {
states[stateName] = Number(indianNationals) + Number(foreignNationals);
}
});
return json ? states : JSON.stringify(states);
};

Получив данные в формате JSON, мы можем легко записать их в электронную таблицу Google с помощью скрипта приложений. Скрипт добавляет новый столбец за день, сохраняя старые данные для сравнения.
/**
* Write the parsed data into a new column in Google Sheet
* All the historic data is also preserved in the sheet.
*/

const writeNewCovid19CasesToSheets = (covid19Cases) => {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(
"Dashboard"
);
const states = sheet
.getRange(3, 1, sheet.getLastRow() - 2, 1)
.getValues()
.map(([state]) => [covid19Cases[state] || 0]);
sheet
.getRange(2, sheet.getLastColumn() + 1, states.length + 1, 1)
.setValues([[new Date()], ...states.map((count) => [count])]);
};

Трекер COVID-19 в Google Таблицах также предоставляет JSON API, который вы можете использовать для импорта данных непосредственно в свои приложения и веб-сайты.
Чтобы опубликовать JSON API, мы опубликовали сценарий как веб-приложение с функцией обратного вызова doGet Служба ContentService возвращает необработанный вывод JSON всякий раз, когда внешнее приложение вызывает URL-адрес скрипта Google.
const doGet = () => {
const key = "Covid19India";
const cache = CacheService.getScriptCache();
let data = cache.get(key);
if (data === null) {
data = getCurrentCovid19Cases(false);
cache.put(key, data, 21600);
}
return ContentService.createTextOutput(data).setMimeType(
ContentService.MimeType.JSON
);
};

Весь код имеет открытый исходный код, и вы можете использовать его в любом проекте.