как узнать погоду в python
Погода-бот: DialogFlow + OpenWeather + Python
Постановка задачи
Задача ставилась следующим образом: написать телеграм-бота, который распознавал бы вопросы о том, какая сегодня погода в том или ином городе и выдавал информацию о погоде.
DialogFlow
Для распознавания человеческой речи как нельзя лучше подходит фреймворк DialogFlow, уже имеющий встроенный в него ML. Давайте приступим к работе.
Переходим по ссылке https://dialogflow.cloud.google.com/, авторизуемся в своем аккаунте гугл и переходим на страницу создания бота. Нажимаем на «Create new agent» и вводим имя агенту: «weather-bot». Выбираем дефолтный язык русский.
Основной объект, с которым работает DialogFlow — интенты или намерения. При взаимодействии с ботом всегда срабатывает то или иное намерение, и задача вас как разработчика — сопроводить каждое намерение разнообразными тренировочными фразами, чтобы бот каждый раз максимально правильно угадывал тот или иной интент.
Итак, переходим во вкладку «Intents». При создании бота автоматически создаются два интента: «Default Fallback Intent» и «Default Welcome Intent». Welcome Intent вызывается тогда, когда происходит запуск бота либо вы пишете ему приветственное сообщение. Fallback вызывается во всех случаях, когда бот не понимает, что вы ему пишете, т.е. во всех случаях, когда ни один другой интент не срабатывает. Оставляем дефолтные интенты без изменений и жмем на «Create intent», называя его «get-weather». Именно с этим намерением мы и продолжим работать в данной статье.
Переходим в наш интент «get-weather», затем — во вкладку «Training phrases» и создаем несколько тренировочных фраз, например, таких:
Заметим, что DialogFlow автоматически определяет города как параметры location. Это очень удобно, поскольку мы будем передавать эти самые параметры в бэкенд нашего приложения.
В самом DialogFlow осталось сделать совсем немного — разрешить ему вебхуки для взаимодействия с бэкендом нашего бота. Для этого листаем в самый низ, разворачиваем вкладку «Fulfillment» и ставим галочку на «Enable webhook call for this intent».
Приступим к написанию серверной части нашего бота. Писать будем на Python в связке с Flask. Для получения информации о погоде был выбран OpenWeather API. Зарегистрируйтесь на этом сайте, затем вам на почту придет API KEY — он и понадобится в нашем приложении. Кроме того, поскольку информация о погоде в этом API выдается по параметрам latitude и longitude — ширина и долгота — нам необходимо как-то преобразовывать город в его ширину и долготу. В этом нам поможет Python-библиотека geopy.
Импортируем все необходимое:
Создаем Flask application:
и вставляем в переменную API_KEY свой API KEY:
Пишем роут для пути «/»:
и далее функцию results(), в которой и будет осуществлена вся логика программы:
Осталось дописать роут, по которому будет переход в наше приложение, назовем его webhook:
и запустить приложение:
И это все?
Не совсем. Программа лежит на нашей локальной машине, но DialogFlow о ней ничего не знает. Чтобы превратить нашу машину в сервер, который станет доступен в интернете, нужна особая утилита. Этим требованиям соответствует ngrok. Скачиваем ее, запускаем и вводим в консоли следующее: «ngrok http 5000». Появится https-ссылка, которую необходимо скопировать и поместить в DialogFlow. Копируем, переходим в Fulfillment в DialogFlow, ставим Webhook в состояние enabled и вставляем в получившееся поле ссылку. Дописываем роут, т.е. «/webhook». Должно получиться что-то похожее на следующее:
Теперь запускаем наше Python-приложение. Осталось совсем немного — подключить интеграцию с Telegram. Переходим на вкладку «Integrations», выбираем телеграм, далее следуем инструкции по получению токена, вставляем токен, и вуаля — приложение готово! Остается его протестировать:
Надеюсь, данная статья была вам полезна и сподвигнет на собственные эксперименты в этой области. Код проекта доступен по ссылке.
Узнаем текущую погоду и прогноз простеньким скриптом на 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.
Простой Telegram-бот на Flask с информированием о погоде
Всем привет, в этой статье я расскажу как сделать простейшего телеграмм бота на Python для отправки текущей погоды в Москве.
Статья расчитана на новичков в Python, которые бы хотели узнать больше о том, как взаимодействовать с внешними сервисами по API.
Как все будет работать?
Регистрация телеграмм бота
На этом этапе нам нужно создать бота и получить к нему доступы. Для этого запускаем бота botfather в Telegram командой ниже.
Создаем нового бота согласно инструкциям из сообщения от бота.
!
Бот создан, но если ему написать какое-нибудь сообщение, он никак на него не отреагирует. Исправим это.
Справка о Flask
Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности.
Поддерживается установка посредством пакетного менеджера PyPI, версия 1.0 совместима с Python 2.7, Python 3.3 и выше.
Установка Flask
Для изоляции зависимостей пакетов Python создадим папку проекта и виртуальное окружение. Для этого в терминале выполним команды ниже. Подробнее о виртуальных окружениях.
После завершения установки и активации виртуального окружения установим Flask.
Подробнее на странице Installation.
Запуск простейшего приложения Flask
В директории weather_bot создадим файл app.py с содержимым.
Запустим полученное приложение.
Перейдем по адресу http://127.0.0.1:5000/ и убедимся, что отображается текст «Hello, World!».
Подробнее на странице Quickstart.
Создание туннеля к localhost с помощью ngrok
Ngrok — это сервис, позволяющий создавать туннели на локальный компьютер пользователя.
Получение сообщений из телеграмм бота
Для того, чтобы Telegram пересылал сообщения на наш сервер, нужно сообщить ему адрес. У нас уже создан туннель, поэтому передадим адрес туннеля в Telegram. Это делается с помощью метода POST setWebhook. Подробнее на странице документации.
где
Подробнее о cURL на странице wiki.
Если получен ответ «ok»: true, то все в порядке.
Проверим, что сообщения доходят до нашего локального сервера. Для этого в файле app.py обновим код.
Перезапустим Flask. Для этого остановим сервер из терминала комбинацией клавиш Ctrl+C и повторно запустим его.
Отправим нашему боту сообщение с произвольным текстом. В консоли должно отобразиться тело запроса из Telegram. Это признак того, что все в порядке.
!
Ответ на сообщения пользователей
Мы научились получать сообщения от пользователей, но еще не умеем их отправлять. Для проверки отправки сообщений будем отвечать текстом «pong» на все сообщения.
Для отправки сообщений пользователям в API Telegram используется метод sendMessage. Подробнее на странице документации.
Запросы будем делать с помощью библиотеки requests, которой нет в списке стандартных, поэтому установим ее. Для этого в терминале с активированным виртуальным окружением выполним команду нижу.
Для отправки сообщений нам нужно знать id чата. Его можно вытащить из тела Telegram-запроса.
Напишем функцию для отправки сообщений, в которую будем передавать id чата и текст сообщения.
Подробнее о библиотеке requests на странице.
Вот так выглядит код в файле app.py
Отправка пользователю информации о погоде
Используем метод current Weatherstack API для получения информации о погоде.
Передадим 2 обязательных Query Params: access_key — секретный ключ вида 86a3fe972756lk34a6a042bll348b1e3, который можно получить после регистрации, и query — город, по которому получаем информацию о погоде, в нашем случае — Moscow.
Подробнее на странице документации.
Внутри функции receive_update() вместо сообщения с текстом «pong» передадим погоду.
Код всего Flask-приложения состоит из 3 функций: получения сообщений из Telegram, отправка сообщений в Telegram и получение информации о погоде из Weatherstack.
Вот и всё! Таким несложным образом мы научили наш бот информировать нас о погоде в Москве.
Python | Найти текущую погоду в любом городе с помощью API openweathermap
openweathermap — это сервис, который предоставляет данные о погоде, включая текущие данные о погоде, прогнозы и исторические данные, разработчикам веб-сервисов и мобильных приложений.
Он предоставляет API с конечными точками JSON, XML и HTML и ограниченным уровнем бесплатного использования. Для совершения более 60 звонков в минуту требуется платная подписка, начиная с 40 долларов в месяц. Доступ к историческим данным требует подписки, начиная с 150 долларов США в месяц. Пользователи могут запрашивать текущую информацию о погоде, расширенные прогнозы и графические карты (с указанием облачного покрова, скорости ветра, давления и осадков).
Примечание. Пользователю необходимо создать учетную запись на openweathermap.org, после чего он сможет использовать только API.
Необходимые модули:
Ниже приведена реализация:
# Python программа для поиска текущей
# детали погоды любого города
# используя openweathermap api
# импорт необходимых модулей
import requests, json
# Введите свой ключ API здесь
# base_url переменная для хранения URL
# Дать название города
city_name = input ( «Enter city name : » )
# complete_url переменная для хранения
# полный адрес URL
complete_url = base_url + «appid=» + api_key + «&q=» + city_name
# получить метод модуля запросов
# вернуть объект ответа
# json метод объекта ответа
# преобразовать данные формата json в
# данные формата питона
# Теперь x содержит список вложенных словарей
# Проверьте, что значение ключа «cod» равно
# «404», значит город найден иначе,
# город не найден
# сохранить значение «main»
# введите переменную y
# сохранить значение, соответствующее
# к «временному» ключу y
current_temperature = y[ «temp» ]
# сохранить значение, соответствующее
# к клавише «давления» у
current_pressure = y[ «pressure» ]
# сохранить значение, соответствующее
# к клавише «влажность» у
current_humidiy = y[ «humidity» ]
# сохранить значение «погода»
# введите переменную z
# сохранить значение, соответствующее
# к ключу «описание» в
weather_description = z[ 0 ][ «description» ]
# вывести следующие значения
print ( » Temperature (in kelvin unit) = » +
«\n atmospheric pressure (in hPa unit) = » +
python-weather 0.3.6
pip install python-weather Copy PIP instructions
Released: Jul 26, 2021
A free and asynchronous Weather API Wrapper.
Navigation
Project links
Statistics
View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery
License: MIT License (MIT)
Tags Weather, API, Weather API, API Wrapper, Weather CLI, CLI
Requires: Python >=3.7
Maintainers
Classifiers
Project description
python-weather
A free and asynchronous weather API wrapper made in python.
Library Example
Use example.py for a quick run 😉
Weather CLI
This package also contains a simple weather CLI for it. To get all usage and supported flags, run:
Project details
Project links
Statistics
View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery
License: MIT License (MIT)
Tags Weather, API, Weather API, API Wrapper, Weather CLI, CLI
Requires: Python >=3.7
Maintainers
Classifiers
Download files
Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.