код региона по openweathermap
Информер погоды на сайте — api OpenWeatherMap
В этой статье мы создадим небольшое приложение на PHP, которое будет показывать прогноз погоды, а затем повторим тоже самое на JavaScript. Для этих целей нам понадобиться данные о погоде и получать мы их будем с помощью API. Существует множество вариантов, за которые нужно заплатить. Для наших целей мы будем использовать сервис OpenWeatherMap, который позволяет отправлять до 60 запросов в минуту бесплатно. Если ваш трафик будет больше, то вы сможете либо воспользоваться продвинутым платным API, либо настроить кэширование для информера погоды на сайте.
Интегрировать этот API на свой сайт и создать полноценный информер погоды довольно легко. Мы сделаем это в 3 этапа, а затем попробуем сделать тоже самое на JS:
Быстрая навигация:
1 Получение ключа OpenWeatherMap API
Чтобы получить API ключ, нам нужно зарегистрироваться в сервисе OpenWeatherMap. Если у вас возникли проблемы и страница не загружается, не работает регистрация — попробуйте зарегистрироваться через VPN.
Для создания информера погоды на сайте введите название компании и выберите цель вашего приложения.
После регистрации вы окажетесь в вашем профиле. Перейдите на вкладку API keys и скопируйте ключ, мы будем использовать его для отправки запросов к API погоды.
1 Определение id города
Скачайте архив с json файлом, откройте его в текстовом редакторе/вашей любимой IDE. Через поиск (ctrl + F) найдите нужный вам город. К примеру Moscow. Обратите внимание, что городов с одинаковым названием может быть несколько, по этому ориентируйтесь по полю country. Сохраните id города под рукой, он нам еще понадобится.
PHP код отправки запроса в API погоды OpenWeatherMap
С помощью кода ниже мы отправим запрос для получения прогноза погоды. Для этого мы используем PHP cURL и в ответ получим данные в формате JSON. Для начала подготовим URL:
Далее выполняем cURL запрос:
Мы получили нужные данные и текущее время, давайте создадим разметку и подставим в нее нужные значения.
Подготовка HTML разметки для отображения прогноза погоды на сайте
Выведим в HTML код описание погоды, диапазон температуры, влажность и скорость ветра.
4 API погоды через JavaScript
Попробуйте создать новую разметку в виде виджета погоды. Добавьте в неё элементы с классами weather__city, weather__forecast, weather__desc и weather__icon.
Посмотрите как работает такой код. В этом примере вместо иконки мы используем разные background-image.
Узнать погоду в Москве
OpenWeatherMap является отличным способом попробовать API погоды на своем сайте, но все же работает он не идеально. Если вы приняли решение, что вам нужен подобный функционал, стоит обратить внимание на платные решения.
Передача данных о погоде в Universal Analytics и Google Analytics 4
Ваш бизнес зависит от погодных условий? Доставка еды, службы такси, пункты проката, фермерские продукты, продажа сезонной одежды, занятия на открытом воздухе, парк развлечений и т.д.? Передавайте данные о погоде в Google Analytics и измеряйте влияние температуры и погодных условий на конверсию и доход вашего сайта.
Учитывая мою страсть к различного рода интересным и нетрививальным задачам, которые можно решить с помощью Google Analytics и Google Tag Manager, рано или поздно я должен был написать об этом для вас в блоге. Сразу хочу сказать, что я не являюсь автором этого способа и не желаю получать незаслуженные лавры за простую адаптацию для русскоязычного сообщества и некоторые дополнения для Google Analytics 4. Когда Симо Ахава (Simo Ahava) впервые написал о передаче данных о погоде в Google Analytics в марте 2015 года, я еще не работал в интернет-маркетинге и вообще не знал, что такое диспетчер тегов от Google.
Спустя 5 лет многие специалисты по интернет-маркетингу опубликовали свои собственные решения. Какие-то из них работают до сих пор и по ним можно повторять шаги настройки, а какие-то нет (устарели). Ниже я прикладываю список статей и видеоуроков на эту тему от различных авторов, которых я брал за основу при написании этой публикации:
Перечитав и перебровав все, на мой взгляд, наиболее простое, точное (по данным) и понятное решение, которое сейчас работает, у Дмитрия Осиюка. Он даже выложил готовый контейнер для GTM, который вы можете скачать и импортировать к себе. Правда без пояснений будет сложно понять последовательность действий.
Я уважаю труд каждого из них, поэтому буду использовать комбинированный вариант из всех представленных с небольшими комментариями и дополнениями 😉 А вот что у вас должно получиться в результате проделанных действий, описанный в этой статье:
Пример отчета в Universal Analytics с данными о погоде
Данные о погодных условиях полезны не только в отчетах Google Analytics ради ВАУ-эффекта или настройки из любопытства (а так можно было?), но еще и при оптимизации рекламных кампаний, когда в зависимости от информации в регионе в конкретное время вы можете корректировать ставки и бюджет. В официальной документации Google описан способ управления кампаниями Google Ads на основе погоды.
Давайте перейдем к непосредственной настройке. Первым делом необходимо зарегистрироваться на сайте openweathermap.org.
OpenWeatherMap — онлайн-сервис, который предоставляет платный и бесплатный (ограниченный) API для доступа к данным о текущей погоде, прогнозам и историческим данным. В качестве источника данных используются официальные метеорологические службы, данные от метеостанций аэропортов, и данные с частных метеостанций.
Введите свои данные (username, email и password), согласитесь с политикой сервиса и нажмите Create Account (Создать аккаунт):
Регистрация на сайте openweathermap.org
На следующем шаге укажите название компании и вид деятельности, к которому вы относитесь. Нажмите Save (Сохранить):
Как будете использовать API?
После регистрации не забудьте перейти в свой почтовый ящик и подтвердить e-mail. Далее вы можете зайти на страницу с тарифами и ознакомиться с ограничениями и ценами сервиса.
Далее перейдите на страницу с вашими API-ключами и скопируйте (сохраните) ключ, который вам предоставили. Он пригодится при настройке тега в Google Tag Manager.
Копирование ключа API
Зайдите в GTM и создайте пользовательскую переменную типа Основной файл cookie с названием session:
Назовите переменную (например Session alive) и сохраните ее. Затем создайте тег типа Пользовательский HTML и вставьте туда следующий код:
OpenWeatherMap – как энтузиасты делают погоду
Мы живем в удивительное время, то что раньше казалось очень сложным внезапно становится доступным и простым. Задачи для решения которых надо было создавать научные институты и крупные организации, сейчас решаются саморганизованными группами энтузиастов. Энтузиасты создают карты и энциклопедии снимают фильмы и разрабатывают software. Я хочу рассказать о той области, в которую этот свежий ветер перемен еще не подул в полную силу – это погода. И нашим проектом – OpenWeatherMap — мы хотим изменить эту ситуацию!
Почему мы привыкли, что прогноз погоды это удел специализированных организаций?
Так сложилось в нашем мире, что погодой всегда занимались и занимаются изолированные от внешнего мира институты, лаборатории и крупные государственные организации. Кто и как рождает прогнозы погоды, всегда оставалось загадкой, покрытой налетом мистики. Большинство из них — это крупные государственные организации, объединенные в World Meteorological Organization
Причем все знают, насколько фантастически точные бывают прогнозы, и мы радуемся как дети, когда этот так. И насколько же неприятны и даже опасны бывают промахи. В конце концов, правильный прогноз погоды влияет не только на наше ежедневное настроение. От него зависят наши жизни! Одним словом, погода это все. Поэтому мы подумали и решили, что такая жизненно важная тема как погода должна быть доступна всем. Она принадлежит людям и должна создаваться теми же людьми, которым это нужно!
Она должна быть доступна, удобна, а, главное, бесплатна!
Нас вдохновляет пример поразительно успешных Википедии и OpenStreetMap. Мы верим, что энтузиасты, объединённые одной идеей, всегда могут достигнуть большего результата, чем крупные бюрократические организации.
Цель проекта — свободный API
Идея свободной и доступной информации о погоде привела к тому, что мы создали и предоставили всем разработчикам приложений бесплатный API для получения разнообразных данных о погоде, такими как:
— Интерактивная карта с данными о текущей погоде
— Прогноз на неделю в городе
— Исторические данные в 120 000 городах мира.
— Данные от 40 000 метеостанций по всему миру получаемые практически в режиме online. (Задержка от секунд до часа)
— Много различных web карт, включая карты облаков, осадков, ветра, температуры и т.п.
Как это работает?
На входе мы имеем (1) данные от погодных станций, а также (2) прогнозы метеорологических служб и научных лабораторий. Эти данные сохраняются в базе данных OWM, а после обработки с помощью уникальных математических алгоритмов
уличной магии они превращаются в интерполированные данные о текущей погоде в любой точке мира, а также во множество карт с погодными явлениями (3). И напоследок, предоставляется (4) API ко всем данным о погоде, включая карты с погодными явлениями. А теперь немного подробнее про каждый из 4-х пунктов.
Что на входе?
Данные метеостанций
Прогнозы
Кроме погодных станций сервис OWM собирает уже обработанные данные о прогнозе погоды. Расчет глобального прогноза для всего мира требует невероятных компьютерных мощностей, и, увы, пока у нас нет своего IBM Deep Thunder. К счастью, многие метео службы разделяют нашу любовь к свободным данным и результаты работы их систем доступны. Мы используем данные двух метеослужб – американской NOAA, которые гоняют модель GFS, и канадской из Environment Canada. Обе модели глобальные и имеют своей целью скорее не предсказать конкретную погодную ситуацию в определенной точке земли, а определить общую атмосферную динамику на планете в целом. Они имеют большой шаг сетки – порядка 50 км и большой временной диапазон прогноза – 5-7 дней.
Кроме того, для отдельных регионов рассчитываются более подробные, с меньшим шагом, модели.
Мы объединяем данные разномасштабных прогнозов – от усредненных и глобальных, до локальных и более точных, соответственно. В результате web карты OpenWeatherMap работают очень удобно – для крупного масштаба используются глобальные прогнозы, а в процессе увеличения загружаются все более и более детальные данные.
Но все это не было бы так интересно, если бы метеорологи не разделяли бы и нашу любовь к свободному софту! Некоторые модели используемые крупными метеослужбами доступны в OpenSource — к примеру модель WRF.
Например, группа французских энтузиастов развернула подобную систему обработки данных на своих домашних серверах и предоставляет детальные и точные прогнозы по всей территории Франции. Кстати сказать, стоимость всей их системы составила 5 тысяч долларов (Blade server на 16 ядер), что не выглядит недоступным.
Сервис OpenWeatherMap объединяет такие точные локальные модели вместе с глобальными. После этого мы ассимилируем сверхоперативные данные от погодных станций. И уже на основе всех этих данных и строятся интерактивные карты, в которых степень детализации данных зависит от масштабирования карты.
Что на выходе?
Карты — многообразие видов
После обработки «сырых» данных, которые OWM получает от метеостанций и метеорологических институтов, создаются различные интерактивные карты с данными о погоде и погодных явлениях. Это карты облаков, давления, температуры, осадков, ветра. Также это данные радаров, погодных станций и просто текущей погоды в любой точке мира.
Подробне о картах
Сервис OpenWeatherMap предоставляет бесплатный API ко всем данным о погоде, к их истории, прогнозам и всему многообразию погодных карт.
API есть двух видов — JSON для получения данных и Tile / WMS для картографии
Используя JSON можно получать:
— Данные о погоде в более чем 120 тысячах городов. При этом города не нужно выбирать из жестко ограниченного списка, их можно найти на карте и увидеть оценочные прогнозы погоды как в самом городе, так и в ближайших регионах.
— Данные о текущей погоде в выбранной точке по координатам lat/lon
— Прогноз на 7 дней в компактной или в полной форме
— «Сырые» данные, полученные от метеостанций
— Данные о погоде за прошедшие периоды
Подробнее о метео API
Как используют наш API
Спектр применения API бесконечно широк. Это мобильные приложения для всех платформ. Это разнообразные web-сайты, которые могут использовать API для отображения текущей погоды, различных погодных графиков, виджетов и т. д. Это системы умного дома.
К примеру, один из пользователей OpenWeatherMap из Великобритании организовал систему автоматического полива своего английского садика. Для планирования количества воды и режима полива он использует данные о прогнозе осадков.
Почему в России все так, как всегда?
Скажу сразу, мы не предоставляем на территории России того, что называется прогноз погоды. Да и вообще не ведем на территории страны какой-либо деятельности. Данный вид деятельности в России требует лицензирования.
Однако, давайте посмотрим, что происходит с погодными станциями и погодным энтузиазмом в России. На иллюстрации ниже можно увидеть текущую картину распределения погодных станций. По сравнению с плотным покрытием всей европейской части, Россия выглядит более чем скромно. И это одна из причин неточности прогнозов погоды на нашей бескрайней территории.
А что мы можем изменить?
Мы уверены, что силами энтузиастов можно изменить ситуацию. Если Вам интересна эта тема и вы хотите помочь проекту, то есть очень много возможностей.
Вы можете, например, следующее:
— подключить свою метеостанцию
— если вы разработчик – использовать наши данные в своих проектах
— или доделать нашу мобильную версию – m.openweathermap.org
— да просто написать о нас в своем блоге
Или если вам интересна математика – очень много задач вокруг этого. К примеру – одна из наиболее важных задач в системе это определение текущей погоды. Как я уже говорилось выше, мы получаем оперативные данные от метеостанций, которые нужно интерполировать в сетку важных для географических точек – городов или отдельных районов. Данные от станций разнородны и поступают не регулярно. Более того, поступает много мусора из ошибочных и неверных измерений, их надо отсеивать. Причем ошибки могут появляться и в данных от вполне надежных метеостанций.
Сейчас мы используем достаточно жёсткий и не адаптивный алгоритм. Очень хотелось бы попробовать в этой задаче какой-либо обучающийся алгоритм.
Очень интересно попробовать в схожей задаче нейросеть.
Или, к примеру, внешний вид карт. Очень хочется сделать свой слой на основе данных OpenStreetMap с меньшим количеством подробностей, но более естественно выглядящий. Если есть идеи, очень рады будем, особенно, если вы знаете как их реализовать на mapnik.
Архитектура
Мы используем только Open Source software, среди которых NgInx, Apache, PHP, Tilecache, OpenLayers, Leaflet, Mapnik, PostGIS, Memcache, MongoDB, Gearman, MySQL, Python and more.
Небольшое лирическое отступление.
Сейчас модный термин bigdata становится продающим брендом, который активно используют все акулы ИТ рынка. Но кроме чистого маркетинга это имеет и огромное влияние на всю индустрию – суть в том, что стоимость транзакции и стоимость хранения больших объёмов информации падает колоссальными темпами, да практически стремится к нулю. Это открывает необыкновенные возможности не только для крупных игроков рынка, но и для небольших. Грубо говоря, несколько лет назад стоимость разработки и поддержки системы с объёмом данных в несколько терабайт и нагрузкой в тысячи транзакций в секунду была неподъемной для небольшой компании, и тем более для энтузиастов. Сейчас все меняется!
Bigdata становится доступной. Это революция, в которой может участвовать каждый!
Собственно отсюда и ответ на вопрос, который мне часто задают — а почему бесплатно? Мы считаем, что строить бизнес на платном API это путь в ад, как в технологическом, так и в коммерческом плане. Наш API останется бесплатным всегда – это основная идея и цель проекта.
Что будет дальше?
Сама идея свободной погоды дает возможности для развития проекта. В данный момент мы уже работаем над новыми направлениями и функциями, такими как:
• Социальность. Это возможность сказать – нет, в нашем городе сейчас не падает снег, а светит солнце и цветут цветы. Это значит, что метеостанция в городе выдает неверные данные, и мы будем искать другие возможности для поддержки точной погоды в этом городе. Автоматические алгоритмы это хорошо, но люди лучше.
• Будем продолжать подключать к проекту внешние расчетные модули для детальной информации по регионам.
• Продвижение идеи любительских погодных станций и подключение их к OpenWeatherMap
• Использование OpenWeatherMap для агропромышленной индустрии, тут потребность в локальных прогнозах очень высока
• Разработка специализированных метеорологических приложений
• Ну и конечно мы очень надеемся на ВАШУ помощь!
Узнаем текущую погоду и прогноз простеньким скриптом на Python’е
На Хабре есть интересная статья о том, как энтузиасты делают погоду. Энтузиасты делают, а мы воспользуемся плодами их трудов — получим эту самую погоду от OpenWeatherMap.org скриптом на Python’е.
Для получения доступа к сервису погоды придется пройти несложную процедуру регистрации на сайте OpenWeatherMap.org. Сформируем и отправим запрос, разберем ответный пакет в формате JSON, и получим текущую температуру с описанием состояния погоды.
Зарегистрироваться на openweathermap.org совсем несложно, а остальное сделать будет ещё проще.
Регистрация нужна для получения идентифицирующей пользователя строки App Id, состоящей из набора букв и цифр (похоже — только из шестнадцатеричных цифр). Такого вида:
«6d8e495ca73d5bbc1d6bf8ebd52c4». После регистрации нужно зайти в личный кабинет и взять App Id, который там называется «API key».
Формирование строки запроса
Сначала попытаемся найти интересующий нас город в их базе. Строка запроса должна быть примерно такая:
В запросе нужно указать нужный город (вместо «Petersburg») и свой App Id (вместо «6d8e495ca73d5bbc1d6bf8ebd52c4». Можно уточнить запрос, указав идентификатор страны после названия города через запятую. Например, так:
Собственно запросная строка будет сформирована самой библиотекой requests в функции get, которую используем для отправки запроса:
Проверка наличия в базе информации о нужном населенном пункте
План такой. В ответ на сформированный запрос получаем пакет в формате JSON. Разбираем пакет и получаем нужные значения по названиям полей.
Запомним числовой идентификатор города city_id для последующего запроса, потому что поставщики сервиса рекомендовали делать запрос не по имени, а по идентификатору.
В ответе может оказаться несколько городов, соответствующих нашему запросу. Кстати, если в запросе указать “Moscow” и убрать страну из строки приведенного в примере запроса, то гарантированно получим несколько строк в списке cities:
Получение информации о текущей погоде
Осталось только получить искомую информацию о погоде. Если нас не интересуют имперские единицы измерения, то в запросе указываем, что желаем получить метрические единицы: «units=metric». Если описание погоды нужно получить на русском, то указываем «lang=ru».
Если верить сервису, сейчас (14.11.2016 в 23:20) в Москве:
Прогноз на 5 дней
На сайте OpenWeatherMap есть ещё масса интересного — получение информации по географическим координатам, архив погоды, информация с конкретных метеостанций. Описание всех доступных сервисов можно посмотреть здесь http://openweathermap.org/api
Для работы на Python’е с OpenWeatherMap существует специализированная библиотека pyowm.
Помимо OpenWeatherMap есть другие сайты, предоставляющие аналогичную информацию. Например, WorldWeatherOnline. Доступные API можно посмотреть здесь. Регистрация нужна. Есть библиотека на Python’е: pywwo.
One Call API
Make just one API call and get all your essential weather data for a specific location with our new OpenWeather One Call API.
Easy migration from the Dark Sky API.
The One Call API provides the following weather data for any geographical coordinates:
Current and forecast weather data
To get access to current weather, minute forecast for 1 hour, hourly forecast for 48 hours, daily forecast for 7 days and government weather alerts, please use this section of the documentation.
If you are interested in historical weather data, please read the «Historical weather data» section.
How to make an API call
Parameters | ||
---|---|---|
lat, lon | required | Geographical coordinates (latitude, longitude) |
appid | required | Your unique API key (you can always find it on your account page under the «API key» tab) |
exclude | optional | By using this parameter you can exclude some parts of the weather data from the API response. It should be a comma-delimited list (without spaces). |
Example of API call
Example of API response
Fields in API response
Historical weather data
To learn about how get access to historical weather data for the previous 5 days, please use this section of the documentation.
If you are interested in current weather data, forecasts and weather alerts please read the «Current and forecast weather data» section.
How to make an API call
Example of API call
Example of API response
Fields in API response
List of weather condition codes
List of weather condition codes with icons (range of thunderstorm, drizzle, rain, snow, clouds, atmosphere including extreme conditions like tornado, hurricane etc.)
Other features
Units of measurement
Wind speed is available in miles/hour and meter/sec.
Examples of API calls
Multilingual support
You can use lang parameter to get the output in your language.
The contents of the description field will be translated.
Parameters | ||
---|---|---|
lang | optional | You can use the lang parameter to get the output in your language. |
Example of API call
We support the following languages. To select one, you can use the corresponding language code:
List of national weather alerts sources
Please note that some agencies from the list may cease to provide us the weather alert information.
In case you don’t receive alerts from any agency, please contact us.
We constantly work on our product’s improvement and keep expanding the list of partner agencies.
Call back function for JavaScript code
To use JavaScript code you can transfer callback functionName to JSONP callback.