Введение
Сегодня наткнулся на интересный зарубежный сервис — openweathermap.org. Этот сервис предоставляет всем разработчикам приложений и сайтов бесплатные API для получения разнообразной информации о погоде. Самое интересное, это то что сервис полностью бесплатный и не имеет ни каких ограничений по количеству обращений. База городов огромная, я попробовал несколько маленьких городов из нескольких десятков стран — информация всегда возвращалась, правда не знаю на сколько точная :).
Еще одним из преимуществ этого сервиса, является очень удобная возможность осуществлять поиск города: поиск можно производить по id города, по названию(в названии можно использовать как латиницу так и кириллицу) и по географическим координатам. Самый удобный способ на мой взгляд — это поиск по названию города, именно этот способ я и реализовал в примере.
Работа с API погоды в php. Код
Ниже приведу пример кода для получения погоды в городе Брянск:
// кодировка страницы
header('Content-Type: text/html;charset=UTF-8');
$city = "Bryansk"; // город. Можно и по-русски написать, например: Брянск
$mode = "json"; // в каком виде мы получим данные
$units = "metric"; // Единицы измерения. metric или imperial
$lang = "ru"; // язык
$countDay = 7; // количество дней. Максимум 14 дней
// формируем урл для запроса
$url = "http://api.openweathermap.org/data/2.5/forecast/daily?q=$city&mode=$mode&units=$units&cnt=$countDay&lang=$lang";
// делаем запрос к апи
$data = @file_get_contents($url);
// если получили данные
if($data){
// декодируем полученные данные
$dataJson = json_decode($data);
// получаем только нужные данные
$arrayDays = $dataJson->list;
// выводим данные
foreach($arrayDays as $oneDay){
echo "Утром: " . $oneDay->temp->morn . "<br/>";
echo "Днем: " . $oneDay->temp->day . "<br/>";
echo "Вечером: " . $oneDay->temp->eve . "<br/>";
echo "Ночью: " . $oneDay->temp->night . "<br/>";
echo "Скорость ветра: " . $oneDay->speed . "<br/>";
echo "Погода: " . $oneDay->weather[0]->description . "<br/>";
echo "Давление: " . $oneDay->pressure . "<br/>";
echo "Влажность: " . $oneDay->humidity . "<br/>";
echo "<hr/>";
}
}else{
echo "Сервер не доступен!";
}
Обновление за 06.03.2018
Привет, спустя 4 года :) Сегодня наткнулся на эту старую статью и оказалась, что спустя время она уже не совсем полная. Оказывается, что с 9 октября 2015 года, сервис, который предоставляет апи для получения погоды, ввел изменения в свою работу. Все осталось, как и прежде, только теперь добавился еще один обязательный параметр — appid. Это ключ, который можно бесплатно получить в сервисе. Для его получения необходимо зарегистрироваться на сайте и отправить заявку на активацию. Подробнее можно почитать на сайте: сайт.
Когда получите ключ appid, код скрипта нужно будет немного подправить, а именно одну строку, где происходит запрос. К ссылке добавится один параметр &appid=ВАШ_КЛЮЧ, вот так:
// формируем урл для запроса $url = "http://api.openweathermap.org/data/2.5/forecast/daily?q=$city&mode=$mode&units=$units&cnt=$countDay&lang=$lang&appid=ВАШ_КЛЮЧ";
Обновление за 04.12.2018
Немного изменился адрес запроса и параметры, которые нужно передавать:
$city = "Bryansk"; // город. Можно и по-русски написать, например: Брянск $country = "RU"; // страна $mode = "json"; // в каком виде мы получим данные json или xml $units = "metric"; // Единицы измерения. metric или imperial $lang = "ru"; // язык $countDay = 7; // количество дней. Максимум 14 дней $appID = "ВАШ КЛЮЧ"; // Ваш APPID // формируем урл для запроса $url = "http://api.openweathermap.org/data/2.5/forecast?q=$city,$country&cnt=$countDay&lang=$lang&units=$units&appid=$appID";

(7 оценок, среднее: 4,71 из 5)
Огромное спасибо за рабочее решение!
Разве что у них стал обязателен параметр appid
Огромное спаибо. Очень помогли!
Январь 2022 года. Опять что-то в api поменяли и не выводится.
Огромное спасибо, это как раз то что мне и нужно было
почему не дописали подробнее
как запускать скрипт, где искать результат, как попадет в телегу результат