training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как получить данные Яндекс погоды в формате JSON на PHP

Создано: 27 июля 2015Автор: Егор Астапов41029 просмотровСложность: легкий

Мне понадобилось вывести на странице погоду от яндекса для своего города. Я знаю несколько сервисов, которые могу показать погоду, но мне хотелось использовать сервис от Яндекса (Яндекс.Погода). Нашел интересную статью на хабре Яндекс.ТвояПогода и решил немного переделать скрипт. Посмотрите эту статью. Мне не нужно выводить информер на странице, а нужно получить данные о погоде в JSON-формате. Подробно о технологии AJAX читайте на странице технология ajax jquery. Я немного переделал скрипт. Создал массив $weatherArr. Он содержит в себе данные о погоде для определённого города. Я присвоил переменной id-города Краснодара.


// список городов https://pogoda.yandex.ru/static/cities.xml
$city_id=34929; // id города
$data_file="http://export.yandex.ru/weather-ng/forecasts/$city_id.xml"; 
// раскладываем xml на массив
$xml = simplexml_load_file($data_file); 
//var_dump($xml) посмотрите на свойства объекта
/* выбираем требуемые параметры (город, температура, пиктограмма 
и тип погоды текстом (облачно, ясно)*/
$city=$xml->fact->station;
$temp=$xml->fact->temperature;
$pic=$xml->fact->image;
$type=$xml->fact->weather_type; 
// Если значение температуры положительно, для наглядности добавляем "+"
if ($temp>0) {$temp='+'.$temp;}
$weatherArr = Array(
                'city_id' => $city_id,
                'city' => (string)$city[0], 
                'img' => 'http://img.yandex.net/i/wiz'.$pic.'.png', 
                'type' => (string)$type,
                'temperature' => $temp."oC"
              );
echo json_encode($weatherArr); 

Скрипт грабит xml-документ и эти значения нужно как-то передать. У скрипта есть один недостаток. Он медленно работает. Функция simplexml_load_file() возвращает объект с довольно большим количеством свойств. Мне нужны строго определённые значения: ID-города, название города, картинка состояния погоды, тип, значение температуры в градусах. Я собираю все значения в один массив, а потом вывожу его в JSON-формате с помощью функции json_encode().

Для ускорения работы этого скрипта вы можете использовать cron планировщик. У вас информация может записываться в базу и вы можете обновлять её через несколько минут.

Значение переменной $xml - это объект. В нем много интересных свойств. Вы можете копаться в них. Меня интересует только несколько параметров и только за сегодняшний день. Думаю там есть прогноз на текущую неделю. Поэкспериментируйте с объектом $xml.

Комментарии

реклама