как узнать id города для погоды
Информер погоды на сайте — 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 погоды на своем сайте, но все же работает он не идеально. Если вы приняли решение, что вам нужен подобный функционал, стоит обратить внимание на платные решения.
Drupal Русскоязычное сообщество
дан город хочу вывести погоду через yahoo weather api не могу найти id города помогите. название города Beloretsk Россия-Башкирия http://maps.yahoo.com/#mvt=s&lat=53.966702&lon=58.400002&zoom=14&q=453+B.
Комментарии
http://pers.narod.ru/php/php_yahooweather.html не тот id посмотри там запрос на хмл страницу делают вот такой надо для моего города. а woeid почему то неподходит вот такого формата надо RSXX1319
да конечно согласен с тобой, но мой английский оставляет желать лучшего а это один стоящий мануал на русском и готорыми php доками. и который не работает в моем городе((( блин.
хотя и при запросе http://weather.yahooapis.com/forecastrss?w=1987877&u=c выдает ошибку. что то не так делаю(
а можно подробнее. я только учу php.
var_dump($yw_forecast)
?>
это код для вставки в блок?
выдает ошибку в последней строке почему( Notice: Undefined variable: yw_forecast в функции eval() (строка 23 в файле /modules/php/php.module(80) : eval()’d code).
почему то при отправки запроса прямо через строку выводит ответ
это код для вставки в блок?
почему то при отправки запроса прямо через строку выводит ответ
(поменялся GET-параметр с p на w)
все равно не работает( кароче yahoo не отображает моего города( помогите с http://www.worldweatheronline.com/Beloretsk-weather/Bashkortostan/RU.aspx этим сервисом
все равно спасибо) за то что помогал. тем кто столкнулся с этим же вопросом есть такая статья http://blog.devenergy.ru/archives/218 опираясь на нее попытаюсь выйти из ситуации
Трекер
Переключение кратное увеличение минимального количества Drupal Commerce
Ошибка при установке модуля drush для drupal 7
Обучение созданию собственных тем на drupal 7
Каталог на друпале 8 версии
Изменить формат даты в блоке
Как в Drupal 7 отображать аватары пользователей из другого источника?
Не приходят email c форм. D8.
Подменить стандартную форму
Версия для слабовидящих
Новые материалы
Переключение кратное увеличение минимального количества Drupal Commerce
Ошибка при установке модуля drush для drupal 7
Изменить формат даты в блоке
Как в Drupal 7 отображать аватары пользователей из другого источника?
Подменить стандартную форму
Каталог на друпале 8 версии
Обучение созданию собственных тем на drupal 7
Доработка и сопровождение проекта на Drupal 7
Требуется сильный drupal разработчик для доработки сложного сайта
На развитие drupal.ru
Ваша финансовая помощь дает нам возможность оплачивать хостинг и поддерживать стабильную работу сайта. Благодарим за поддержку!
Узнаем текущую погоду и прогноз простеньким скриптом на 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.
Выбор местоположения
Прогноз для моего города и района
Регион, в котором вы находитесь, определяется автоматически.
Чтобы уточнить прогноз для своего местоположения:
Укажите название города на странице настроек.
Выбранный вручную город сохраняется в файлах cookie. Если вы постоянно видите другой город вместо выбранного вручную, значит из вашего браузера удаляются cookie. Разрешите сохранение cookie в настройках браузера. О том, как это сделать, см. в разделе Настроить прием файлов cookie.
Подробнее о том, как сайты определяют ваше местоположение, можно узнать в разделе Ваше местоположение.
Прогноз для другого города и района
Чтобы узнать прогноз погоды для другого города, района или станции метро:
Выбор местоположения
Прогноз для моего города и района
Регион, в котором вы находитесь, определяется автоматически.
Чтобы уточнить прогноз для своего местоположения:
Укажите название города на странице настроек.
Выбранный вручную город сохраняется в файлах cookie. Если вы постоянно видите другой город вместо выбранного вручную, значит из вашего браузера удаляются cookie. Разрешите сохранение cookie в настройках браузера. О том, как это сделать, см. в разделе Настроить прием файлов cookie.
Подробнее о том, как сайты определяют ваше местоположение, можно узнать в разделе Ваше местоположение.
Прогноз для другого города и района
Чтобы узнать прогноз погоды для другого города, района или станции метро:
Вывод прогноза погоды из интернета на модуль со светодиодной матрицей
В данной статье я расскажу о том, как сделать собственный погодный монитор, который будет самостоятельно запрашивать текущую погоду в выбранном городе по интернету и выводить соответствующую информацию на цветную светодиодную матрицу.
Что понадобится
Погода
Собственно, первая проблема, которая встает перед нами — откуда брать погоду? С какого сайта? Я думаю, всем известны такие сайты, как Гисметео или Яндекс.Погода. Но в нашем проекте мы не будем брать у них метеосводку. Мы воспользуемся сайтом, про который, я думаю, вы и не слышали: http://openweathermap.org/.
Итак, допустим, нам необходимо узнать погоду в городе Москве. Мы можем найти соответствующую страницу через поиск. Открыв её, мы увидим примерно следующую картину.
В этот раз не будет никаких картинок, только немного текста примерно такого содержания:
День | Ночь | Состояние |
---|---|---|
01d | 01n | Чистое небо |
02d | 02n | Малооблачно |
03d | 03n | Рваная облачность |
04d | 04n | Облачно с прояснениями |
09d | 09n | Ливневый дождь |
10d | 10n | Дождь |
11d | 11n | Гроза |
13d | 13n | Снег |
50d | 50n | Туман |
Мы будем ориентироваться только на первые 2 цифры. Для простоты примера не будем различать день и ночь, а также поддержим только самые распространённые варианты текущей погоды.
Иконки
Как вы помните, наша светодиодная матрица имеет разрешение 8×8 пикселей. И поэтому наши картинки должны быть такого же размера.
Вот четыре наших картинки: дождь, снег, солнце и гроза.
Такие картинки делаются очень просто. Достаточно поискать в интернете «Online icon editor». Там можно попиксельно нарисовать их и сохранить себе, к примеру, в формате PNG).
Проблема в том, что для нас такой формат не подходит, поскольку изображение в нем сжато и для работы с ним его необходимо распаковать. А это делается по достаточно сложному алгоритму. Нам бы хотелось иметь данные в каком-нибудь простом несжатом формате.
Есть специальный формат, называемый PBM (PortaBle anyMap). Изображение в нем представляется в обыкновенном текстовом формате. Вот пример нашей иконки со снегом в этом формате:
Файл содержит всего 4 строки:
Можно немного изменить последовательность, чтобы было чуть лучше видно, что это снег. Просто добавим в нужных местах переносы строк. Обратите внимание нарасположение единиц и нулей: они формируют картинку.
Как уже было видно чуть раньше, эти файлы были созданы в бесплатном графическом пакете GIMP, скачать который можно с официального сайта.
Полученный PBM-файлы необходимо скопировать на карту памяти, а затем вставить ее в слот на Arduino Ethernet.
Подключение
Поскольку мы используем светодиодный индикатор не напрямую, а как готовый модуль, то это в значительной степени облегчает подключение его к Arduino. Модуль индикатора работает через шину SPI, поэтому нам потребуется всего 3 провода для данных и 2 — для питания.
Нижняя часть модуля индикатора представлена на рисунке ниже.
Нам необходим разъем, который обведен на картинке прямоугольником. Распиновка у него следующая:
Номер | Назначение |
---|---|
1 | CLK — синхроимпульсы |
2 | LATCH — выбор устройства |
3 | DATA — данные |
В нижнем ряду этого разъёма находятся пины для подключения питания.
Все остальные разъемы нужны для того, чтобы иметь собирать из этих модулей большие матрицы.
Ethernet
Используемый нами Arduino Ethernet не имеет собственного USB-разъема и чипа, служащего посредником между USB и основным микроконтроллером. Поэтому для подключения его к компьютеру необходим преобразователь USB-Serial. С него же будет браться питание для Arduino.
На самом деле, мы использовали Arduino Ethernet с установленным PoE (Power Over Ethernet) модулем, поэтому при желании вы можете получать питание прямо из витой пары, и ко всему устройству в этом случае будет тянуться всего один провод. Однако для использования PoE, ваша сеть должна это поддерживать: существуют как роутеры, «заряжающие сеть», так и специальные, отдельные устройства, называющиеся PoE-инжекторами.
Возможные конфликты
Необходимо учитывать тот факт, что Ethernet, SD-карта и индикатор работают по одному интерфейсу SPI. Его прелесть в том, что каждое новое устройство занимает всего один дополнительный пин (chip select), а 3 пина для обмена данными (11-й, 12-й и 13-й для Arduino Uno, Arduino Ethernet и подобных плат) остаются одними и теми же. Обратной стороной медали является тот факт, что одновременно общение может происходить лишь с одним устройством на шине.
Мы будем работать поочерёдно с Ethernet и SD, но нашу матрицу мы вообще полностью подключим к другим пинам, чтобы её работа никак не зависела и не пересекалась с работой Ethernet и SD. Это обусловлено тем, что динамическая индикация, которая реализована матрицей-модулем требует частого и постоянного обмена данными между собой и микроконтроллером.