skysilver

 
<<< Back

Получение данных о 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 раз в сутки нет смысла.

Discuss (20) (21)

See also:
2019-07-12 MajorDoMo и Яндекс Алиса. Алиса, включи канал Карусель.
2019-06-20 MajorDoMo и Яндекс Алиса. Алиса, измени цвет бра на красный.
2019-06-18 MajorDoMo и Яндекс Алиса. Алиса, сделай ярче настольную лампу.
2019-06-17 MajorDoMo и Яндекс Алиса. Алиса, включи свет на кухне.
2019-06-10 MajorDoMo и Яндекс Алиса. Модуль Yandex Home.
2019-06-06 MajorDoMo и Яндекс Алиса. Объединение аккаунтов.
2019-06-05 MajorDoMo и Яндекс Алиса. Регистрация приватного навыка.
2019-06-03 Загрузка PHP-расширения PDO MySQL в Windows
2019-06-01 MajorDoMo и Яндекс Алиса. Публикация вебхуков.
2019-05-29 MajorDoMo и Яндекс Алиса. Общие сведения.
2019-05-22 Экспресс контроль состояния циклов в Linux
2019-05-08 Сценарий контроля состояния SSL сертификатов сайтов
2019-02-26 Экспорт графиков в PNG-файл в модуле Charts
2019-01-26 Мультисерийный кастомный график в модуле Charts
2018-12-13 График с цветовой индикацией выхода величины за пределы
2018-11-12 Кастомный график в модуле Charts
2018-08-15 Кронштейн NB F120 (North Bayou)
2018-07-18 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 3.
2018-06-20 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 2.
2018-06-15 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 1.
2018-05-20 Кросс-компиляция ядра для Banana Pi M2U
2018-05-14 Ссылки на ресурсы по MajorDoMo
2018-03-02 Знакомство и тестирование Banana Pi M2U
2018-02-21 Распаковка Banana Pi M2U
2018-02-14 Одноплатный ПК для MajorDoMo
2018-08-14 Заметки по железу
2018-01-23 Мой взгляд на вопрос голосового управления в MajorDoMo
2018-01-17 Обзор цен на устройства Xiaomi
2017-12-24 Гирлянда на ESP8266 и WS2812
2017-12-20 Блог им. skysilver

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

На форуме: skysilver

Web-site URL:
http://connect.smartliving.ru/profile/461