Архив метки: xml

Информер погоды через openweathermap.org

Наткнулся на набор бесплатных картинок с погодными условиями. Пришла в голову мысль сделать информер погоды со своими иконками погоды. С яндексом подружить не удалось, но попался сайт http://openweathermap.org/. Есть открытый API, многое правда самому пришлось додумывать)

Узнаем id нужного города, получаем xml файл с погодой,  закидываем данные в массив, раскладываем данные по переменным.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$city2_id=524901; // id города openweather.org
$data_file2="http://api.openweathermap.org/data/2.5/weather?id=$city2_id&mode=xml&lang=ru&units=metric"; // адрес xml файла
$data_file2 = file_get_contents($data_file2,0); //получаем данные о погоде из xml файла
$xml2 = new SimplexmlElement($data_file2); //помещаем данные в массив
$city2= $xml2->city[name];//забиваем необходимые данные в переменные
$temperarure = $xml2->temperature[value];
$weather_id = $xml2->weather[number];
$weather_icon = $xml2->weather[icon];
$weather_type = $xml2->weather[value];
$pressure = $xml2->pressure[value];
$humidity = $xml2->humidity[value];
$sunrise = $xml2->city->sun[rise];
$sunset = $xml2->city->sun[set];
$windspeed = $xml2->wind->speed[value];
$windcode = $xml2->wind->direction[code];
?>
<?
$city2_id=524901; // id города openweather.org
$data_file2="http://api.openweathermap.org/data/2.5/weather?id=$city2_id&mode=xml&lang=ru&units=metric"; // адрес xml файла
$data_file2 = file_get_contents($data_file2,0); //получаем данные о погоде из xml файла
$xml2 = new SimplexmlElement($data_file2); //помещаем данные в массив
$city2= $xml2->city[name];//забиваем необходимые данные в переменные
$temperarure = $xml2->temperature[value];
$weather_id = $xml2->weather[number];
$weather_icon = $xml2->weather[icon];
$weather_type = $xml2->weather[value];
$pressure = $xml2->pressure[value];
$humidity = $xml2->humidity[value];
$sunrise = $xml2->city->sun[rise];
$sunset = $xml2->city->sun[set];
$windspeed = $xml2->wind->speed[value];
$windcode = $xml2->wind->direction[code];
?>

Выполняем нужные преобразования  с данными,

1
2
3
4
5
6
7
8
<?
if ($temperarure>0) {$temperarure='+'.$temperarure;}// Если значение температуры положительно, для наглядности добавляем "+"
$pressure = $pressure * 0.75006375541921; //переводим из hPa в mmHg
$pressure = round($pressure); //округляем
$temperarure = round($temperarure);
$sunrise = date('H:i',strtotime("+4 hours", strtotime($sunrise)));//меняем формат даты и прибавляем 4 часа
$sunset = date('H:i',strtotime("+4 hours", strtotime($sunset)));
?>
<?
if ($temperarure>0) {$temperarure='+'.$temperarure;}// Если значение температуры положительно, для наглядности добавляем "+"
$pressure = $pressure * 0.75006375541921; //переводим из hPa в mmHg
$pressure = round($pressure); //округляем
$temperarure = round($temperarure);
$sunrise = date('H:i',strtotime("+4 hours", strtotime($sunrise)));//меняем формат даты и прибавляем 4 часа
$sunset = date('H:i',strtotime("+4 hours", strtotime($sunset)));
?>

Формируем вывод и выводим все это дело

1
2
3
4
5
6
<?
$title = "Город: ".$city2."\n".
$weather_type." \nДавление: ".$pressure." мм рт. ст.\nВетер: ".$wind[trim ($windcode)].", ".$windspeed." м/с \nВлажность: ".$humidity."% \nВосход: ".$sunrise."\nЗакат: ".$sunset;//формируем данные для вывода в title картинки
echo ("<img src=\"/blocks/weather/images/$weather_icon.png\" alt=\"$weather_type\" title=\"$title\" >"); //путь к кртинкам должен быть абсолютным
echo ("$temperarure<sup>o</sup>C<br>");//выводим все безобразие
?>
<?
$title = "Город: ".$city2."\n".
$weather_type." \nДавление: ".$pressure." мм рт. ст.\nВетер: ".$wind[trim ($windcode)].", ".$windspeed." м/с \nВлажность: ".$humidity."% \nВосход: ".$sunrise."\nЗакат: ".$sunset;//формируем данные для вывода в title картинки
echo ("<img src=\"/blocks/weather/images/$weather_icon.png\" alt=\"$weather_type\" title=\"$title\" >"); //путь к кртинкам должен быть абсолютным
echo ("$temperarure<sup>o</sup>C<br>");//выводим все безобразие
?>

Стандартные картинки подменяем своим, не меняя имени.

13d 11d 10n 10d 09n 09d04n 04d 03n 03d 02n 02d 01n 01d

У меня получилось вот так:

1
http://web.scgarage.ru/blocks/weather/index.php
http://web.scgarage.ru/blocks/weather/index.php

При наведении на иконку, отображается дополнительная информация.