skysilver

<<< Назад

Получение данных о COVID с карты Яндекс

Парсинг статистики о коронавирусе с карты Яндекс - мировая, по странам, по регионам России.

Данный забираем с https://yandex.ru/web-maps/covid19

Нужные страны и регионы перечисляем в массиве $region, предварительно убедившись, что по таким субъектам есть данные на карте.

$region = ['Кировская область','Нижегородская область','Москва','Австралия','Украина'];

Код сценария (или метода, кому как нравится).

$region = ['Кировская область','Нижегородская область','Москва','Австралия','Украина'];

$str = file_get_contents('https://yandex.ru/web-maps/covid19');

$covid = [];

$re_json = '/class=\"config-view\">(.+?)</';
$re_rus = '/\"covid-stat-view__item-value\">(.+?)</';
$re_time = '/\"covid-panel-view__subtitle\">(.+?)</';

// Статистика по России
preg_match_all($re_rus, $str, $matches, PREG_SET_ORDER, 0);

$covid['Россия']['cases'] = (int)preg_replace("/[^0-9]/", '', $matches[0][1]);
$covid['Россия']['new_cases'] = (int)preg_replace("/[^0-9]/", '', $matches[1][1]);
$covid['Россия']['cured'] = (int)preg_replace("/[^0-9]/", '', $matches[2][1]);
$covid['Россия']['deaths'] = (int)preg_replace("/[^0-9]/", '', $matches[3][1]);

// Мировая статистика и статистика по регионам России
ini_set('pcre.backtrack_limit', 5000000);
preg_match($re_json, $str, $matches, PREG_OFFSET_CAPTURE, 0);

$data = json_decode($matches[1][0], true);

$covid['Россия']['tests'] = (int)preg_replace("/[^0-9]/", '', $data['covidData']['tests']);

foreach ($data['covidData']['items'] as $item) {
    // Мировая статистика
    if (!isset($item['ru'])) {
        $covid['Мир']['cases'] += $item['cases'];
        $covid['Мир']['cured'] += $item['cured'];
        $covid['Мир']['deaths'] += $item['deaths'];
    }
    // Статистика по странам и регионам России  
    if (in_array($item['name'], $region)) {     
        $covid[$item['name']]['cases'] += $item['cases'];
        $covid[$item['name']]['cured'] += $item['cured'];
        $covid[$item['name']]['deaths'] += $item['deaths'];
        if (is_array($item['histogram']) && count($item['histogram']) > 2) {
            $cnt = count($item['histogram']);
            $today = $item['histogram'][$cnt-1]['value'];
            $yesterday = $item['histogram'][$cnt-2]['value'];
            $covid[$item['name']]['new_cases'] = $today - $yesterday;
        }
    }
}

preg_match($re_time, $str, $matches, PREG_OFFSET_CAPTURE, 0);
$covid['Updated'] = substr($matches[1][0], 0, strpos($matches[1][0], ' ('));

//var_dump($covid); // для отладки раскомментировать

На выходе имеем массив $covid, который в дальнейшем используем на свое усмотрение, - раскидываем по свойствам объекта(ов), формируем отчет для телеграм-бота и т.д.

Результат работы.
covid_vardump

Пример формирования отчета с последующим его сохранением в свойство объекта.

$report = "<b>️ COVID-2019 ️</b>\n\n";

$report .= "<b>В Кирове:</b>\n";
$report .= "Заражений всего: <b>" . $covid['Кировская область']['cases'] . "</b>\n";
$report .= "Заражений за сутки: <b>" . $covid['Кировская область']['new_cases'] . "</b>\n";
$report .= "Выздоровело: <b>" . $covid['Кировская область']['cured'] . "</b>\n";
$report .= "Смертей: <b>" . $covid['Кировская область']['deaths'] . "</b>\n\n";

$report .= "<b>В Нижнем:</b>\n";
$report .= "Заражений всего: <b>" . $covid['Нижегородская область']['cases'] . "</b>\n";
$report .= "Заражений за сутки: <b>" . $covid['Нижегородская область']['new_cases'] . "</b>\n";
$report .= "Выздоровело: <b>" . $covid['Нижегородская область']['cured'] . "</b>\n";
$report .= "Смертей: <b>" . $covid['Нижегородская область']['deaths'] . "</b>\n\n";

$report .= "<b>В России:</b>\n";
$report .= "Заражений всего: <b>" . $covid['Россия']['cases'] . "</b>\n";
$report .= "Заражений за сутки: <b>" . $covid['Россия']['new_cases'] . "</b>\n";
$report .= "Выздоровело: <b>" . $covid['Россия']['cured'] . "</b>\n";
$report .= "Смертей: <b>" . $covid['Россия']['deaths'] . "</b>\n";
$report .= "Проведено тестов: <b>" . $covid['Россия']['tests'] . "</b>\n\n";

$report .= "<b>В мире:</b>\n";
$report .= "Заражений: <b>" . $covid['Мир']['cases'] . "</b>\n";
$report .= "Выздоровело: <b>" . $covid['Мир']['cured'] . "</b>\n";
$report .= "Смертей: <b>" . $covid['Мир']['deaths'] . "</b>\n\n";

$report .= "По состоянию на: <b>" . $covid['Updated'] . "</b>";

SetGlobal('covid2019', $report);

Результат выполнения команды в телеграм-боте.

covid_bot

Данные обновляются редко, поэтому запускать сценарий чаще 2-3 раз в сутки нет смысла.

Обсуждение (19) (19)

Смотрите так же:
12.07.2019 MajorDoMo и Яндекс Алиса. Алиса, включи канал Карусель.
20.06.2019 MajorDoMo и Яндекс Алиса. Алиса, измени цвет бра на красный.
18.06.2019 MajorDoMo и Яндекс Алиса. Алиса, сделай ярче настольную лампу.
17.06.2019 MajorDoMo и Яндекс Алиса. Алиса, включи свет на кухне.
10.06.2019 MajorDoMo и Яндекс Алиса. Модуль Yandex Home.
06.06.2019 MajorDoMo и Яндекс Алиса. Объединение аккаунтов.
05.06.2019 MajorDoMo и Яндекс Алиса. Регистрация приватного навыка.
03.06.2019 Загрузка PHP-расширения PDO MySQL в Windows
01.06.2019 MajorDoMo и Яндекс Алиса. Публикация вебхуков.
29.05.2019 MajorDoMo и Яндекс Алиса. Общие сведения.
22.05.2019 Экспресс контроль состояния циклов в Linux
08.05.2019 Сценарий контроля состояния SSL сертификатов сайтов
26.02.2019 Экспорт графиков в PNG-файл в модуле Charts
26.01.2019 Мультисерийный кастомный график в модуле Charts
30.12.2018 Личные итоги 2018 года
13.12.2018 График с цветовой индикацией выхода величины за пределы
12.11.2018 Кастомный график в модуле Charts
15.08.2018 Кронштейн NB F120 (North Bayou)
18.07.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 3.
20.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 2.
15.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 1.
20.05.2018 Кросс-компиляция ядра для Banana Pi M2U
14.05.2018 Ссылки на ресурсы по MajorDoMo
02.03.2018 Знакомство и тестирование Banana Pi M2U
21.02.2018 Распаковка Banana Pi M2U
14.02.2018 Одноплатный ПК для MajorDoMo
14.08.2018 Заметки по железу
23.01.2018 Мой взгляд на вопрос голосового управления в MajorDoMo
17.01.2018 Обзор цен на устройства Xiaomi
24.12.2017 Гирлянда на ESP8266 и WS2812
20.12.2017 Блог им. skysilver

Киров, Россия

На форуме: skysilver

Веб-сайт:
http://connect.smartliving.ru/profile/461