Парсер яндекс погоды на PHP

Парсер яндекс погоды на PHP

17 сентября 2019 PHP

Рабочий пример PHP парсера, который получает погоду с Яндекса по ID города. Скрипт сохраняет данные в файле кеша на сайте, и обновляет его раз в час. Так же расскажу как выводить на сайте собственные иконки погоды вместо стандартных от Яндекса.

Шаг 1. Получить id города

На самом деле .xml файл экспорта, который мы будем использовать для получения погоды не документирован Яндексом, и я так понимаю используется только самими разработчиками Яндекс. Поэтому его использование несколько осложнено и может меняться.

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

Если нужного региона не нашли в списке, то есть другой вариант. В поиске Яндекс нажмите иконку настроек и измените регион.

Нажмите найти и в адресной строке увидите параметр rstr. Его значение и будет id нужного региона. Так же в параметре lr всегда указан ваш текущий регион, поэтому можно использовать и его.

Функция для получения погоды с Яндекса

<?
function getWeatherDataXml($cache_life = 3600, $city = 213) {
    $weather = array();
    $cache_file = $_SERVER['DOCUMENT_ROOT']."/log/weather.txt";
    $url='http://export.yandex.ru/bar/reginfo.xml?region='.$city.'.xml';

    if (time() - @filemtime($cache_file) >= $cache_life) {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $data = curl_exec($ch);
            curl_close($ch);
            file_put_contents($cache_file, $data);

            $buf = file_get_contents($url);
    if ($buf) file_put_contents($cache_file, $buf);
    }

    $xml = simplexml_load_file($cache_file);

    $weather['temp'] = $xml->weather->day->day_part[0]->temperature;
    $weather['image'] = $xml->weather->day->day_part[0]->image;
    $weather['weather_type'] = $xml->weather->day->day_part[0]->weather_type;

    return $weather;
}

$weather = getWeatherDataXml();

?>

Вам необходимо задать $cache_life — время жизни кеша (по умолчанию 3600 сек.). Это время, через которое скрипт будет обновлять данные с Яндекс.Погоды. В $city указать id ранее полученного региона (по умолчанию Москва). И в $cache_file путь к файлу кеша (по умолчанию /log/weather.txt).

Теперь при обращении к функции getWeatherDataXml() можно получить и вывести $weather['temp'] — данные температуры , $weather['image'] — иконку и $weather['weather_type'] — тип погоды.

Собственные иконки погоды

Скрипт указанный выше полностью готов к работе. Но иногда стандартные иконки Яндекса могут не вписаться в дизайн сайта. Поэтому привожу пример с кастомными иконками погоды.

<?
function getWeatherDataXml($cache_life = 3600, $city = 213) {
    $weather = array();
    $cache_file = $_SERVER['DOCUMENT_ROOT']."/log/weather.txt";
    $url='http://export.yandex.ru/bar/reginfo.xml?region='.$city.'.xml';

    if (time() - @filemtime($cache_file) >= $cache_life) {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $data = curl_exec($ch);
            curl_close($ch);
            file_put_contents($cache_file, $data);

            $buf = file_get_contents($url);
    if ($buf) file_put_contents($cache_file, $buf);
    }

    $xml = simplexml_load_file($cache_file);

    $weather['temp'] = $xml->weather->day->day_part[0]->temperature;
    $weather['image'] = $xml->weather->day->day_part[0]->image;
    $weather['image'] = str_replace("https://yastatic.net/weather/i/icons/blueye/24/", '/images/weather_ico/', $weather['image']);
    $weather['image'] = str_replace("png", "svg", $weather['image']);
    $weather['weather_type'] = $xml->weather->day->day_part[0]->weather_type;

    return $weather;
}

$weather = getWeatherDataXml();

?>

Иконки размещаем в папке /images/weather_ico/ и подменяем ссылку из Яндекса на свою. Так же я использую иконки .svg. И следующей строкой меняем расширение png на svg.

$weather['image'] = str_replace("https://yastatic.net/weather/i/icons/blueye/24/", '/images/weather_ico/', $weather['image']);
 $weather['image'] = str_replace("png", "svg", $weather['image']);

В папке /images/weather_ico/ находятся файлы иконок. Вот список их имен и значений с примером исходной иконки:

bkn_-ra_d.svg — облачно с прояснениями, небольшой дождь (день)
bkn_-ra_n.svg — облачно с прояснениями, небольшой дождь (ночь)
bkn_-sn_d.svg — облачно с прояснениями, небольшой снег (день)
bkn_-sn_n.svg — облачно с прояснениями, небольшой снег (ночь)
bkn_d.svg — переменная облачность (день)
bkn_n.svg — переменная облачность (ночь)
bkn_ra_d.svg — переменная облачность, дождь (день)
bkn_ra_n.svg — переменная облачность, дождь (ночь)
bkn_sn_d.svg — переменная облачность, снег (день)
bkn_sn_n.svg — переменная облачность, снег (ночь)
bl.svg — метель
fg_d.svg — туман
ovc.svg — облачно
ovc_-ra.svg — облачно, временами дождь
ovc_-sn.svg — облачно, временами снег
ovc_ra.svg — облачно, дождь
ovc_sn.svg — облачно, снег
ovc_ts_ra.svg — облачно, дождь, гроза
skc_d.svg — ясно (день)
skc_n.svg — ясно (ночь)

Остались вопросы по статье? Задайте их прямо сейчас!
Похожие записи
Как создать чат-бота ВКонтакте

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

Простая интеграция Яндекс.Кассы на PHP

На сегодняшний день Яндекс.Касса - это один из самых популярных мерчантов для подключения оплаты на любом сайте. Касса позволяет принимать платежи с помощью банковских карт и Яндекс.Денег, а так же подключить онлайн-кассу. Если у вас интернет-магазин на одной из популярных Читать далее

Вывод постов из Instagram на сайт с помощью API

У инстраграма нет готового виджета для вывода постов на сайте. В прошлой статье мы рассматривали как создать Instagram виджет для сайта с помощью конструктора. Это самый простой и быстрый способ, и на мой взгляд самый лучший. Единственный его минус, как Читать далее

PHP классы, объекты, методы

Абсолютно любой предмет из нашей жизни мы можем описать по его характеристикам и состоянию, а так же воздействовать на это состояние. Например, ваш автомобиль имеет определенный цвет, марку, двигатель и т.д. Кроме того он может ехать, стоять, набирать или сбавлять Читать далее

Удалить значение из массива на PHP

Удалить значение из массива по ключу на PHP довольно простая задача, но вот когда необходимо удалить элемент массива именно по значению, то тут возникают небольшие сложности. Вроде бы банальная задача, но придется воспользоваться небольшой хитростью. В этой статье рассмотрим как Читать далее

Создание чат-бота для Viber

В этой статье рассмотрим как создать простого чат-бота для Viber, который будет принимать и отправлять сообщения в чат. Шаг 1 Итак, для начала необходимо зарегистрироваться в сервисе Viber Admin Panel по этой ссылке. Шаг 2 Создаём бота. Для этого заполняем Читать далее

Регулярные выражения PHP: preg_match, preg_split, preg_replace

Регулярные выражения - это мощный алгоритм сопоставления с образцом, который может быть выполнен в одном выражении. Регулярные выражения используют арифметические операторы, такие как (+, -, ^) для создания сложных выражений. Регулярные выражения помогают вам выполнять такие задачи, как проверка адресов Читать далее

Добавить комментарий

*

code