Парсер яндекс погоды на 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).

Нужна разработка технической документации на заказ? Тогда https://vdoke.ru это компания, которая помогла подготовить документацию для реестра отечественного ПО.

Теперь при обращении к функции 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 отправляющий сообщения с сайта

Что если сообщения с сайта будут приходить не только на ваш e-mail, но и моментально в мессенджер телеграм. Удобно же! Нужно было реализовать такой функционал, ну как и всегда все оказалось довольно просто. Так же стояла задача отправлять сообщения не Читать далее

Отправка формы без перезагрузки страницы на PHP и Ajax

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

Вывести на PHP месяц и день недели на русском

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

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

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

Как встроить видео с YouTube канала на сайт

Для вывода списка видеозаписей из канала или плейлиста YouTube на сайте можно воспользоваться этим полностью рабочим решением на PHP. С помощью этой функции можно получить все необходимые данные видеозаписей: название, изображение и идентификатор видео. Вам понадобится идентификатор канала или плейлиста. Читать далее

Курсы доллара и евро с сайта Центробанка на PHP

Парсер получает курсы доллара и евро с сайта Центробанка каждые 24 часа и записывает их в файл кеша /log/course.txt Скрипт полностью готов к работе и не требует каких-либо дополнительных настроек. <? function loadCourse(){ define("tsCourse","15:00:00"); # Время смены курса центральным банком Читать далее

Календарь на PHP и Ajax

Пример календаря на PHP и Ajax с переключением месяцев. Можно использовать как заготовку для решения любых задач. Я использовал его для создания плагина календаря мероприятий на WordPress. Скрипт использует процедурный подход, но имеет разделенную структуру с шаблоном , что довольно Читать далее

Один комментарий на «Парсер яндекс погоды на PHP»

  1. Дмитрий:

    Для чего код:
    $buf = file_get_contents($url);
    if ($buf) file_put_contents($cache_file, $buf);

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