Введение
Сегодня наткнулся на интересный зарубежный сервис — 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";
Огромное спасибо за рабочее решение!
Разве что у них стал обязателен параметр appid
Огромное спаибо. Очень помогли!
Январь 2022 года. Опять что-то в api поменяли и не выводится.
Огромное спасибо, это как раз то что мне и нужно было
почему не дописали подробнее
как запускать скрипт, где искать результат, как попадет в телегу результат