погодное приложение на python

Погода бот на python

На тему телеграмм ботов много материал, но погода бота я не находил и поэтому для себя и своих братьев написал свой собственный бот на Python.

В первую очередь нам нужна среда разработки для меня это Pycharm от нашей питерской компании. Установка проста как три рубля поэтому на ней останавливаться не буду.

Пока устанавливается Pycharm, нужно получить токены:

для бота от телеграмма,

для доступа к api accuweather

для доступа к api yandex.weather

Итак, для получения токена от телеграмма Вам необходимо написать @BotFather и следовать инструкции (инструкций по созданию телеграмм-бота полно в интернете).

Далее нам нужен токен от яндекса. Если у Вас нет почты от яндекса, то создаем, а потом переходим на сайт https://developer.tech.yandex.ru/services/ нажимаем подключить API. Выбираем API Яндекс.Погоды там будет всплывающее окно с вводом фамилии имени, название компании, номер телефона, город и нужно выбрать бесплатный тариф погода на вашем. Нажимаем перейти к API, там будет KEY #1 вот он то Вам и нужен.

Все токены поместим в переменные среды, об этом в конце статьи.

Запускаем pycharm создаем новый проект.

Переходим в Main.py и в первую очередь устанавливаем дополнительные библиотеки:

В нижнем ряду окна нажимаем кнопку Python Packages, в поиске вводим requests и нажимаем install, тоже повторяем для pyTelegramBotAPI и geopy.

Затем в main.py импортируем библиотеки и токены:

Все вся подготовка сделана, теперь переходим к написанию самого бота

Для того чтобы получить прогноз от accuweather нужен уникальный код города, чтобы его получить нужны его координаты, так же координаты города нам понадобятся при запросе к яндексу, поэтому в первую очередь пишем функцию получения координат через библиотеку geopy:

Теперь получаем код города:

На вход функции даем координаты и токен, префикс “f” перед строкой дает нам вставлять значения переменных в нужные места вместо текста. Далее мы отправляем запрос по указанному url и с нужным заголовком. Хоть resp_loc.text и выглядит как стандартный словарь python на самом деле это json-объект, его нужно переделать в словарь, по ключу ‘Key’ получаем код города.

После этого можно написать уже код получения непосредственно прогноза:

По ключу ‘link’ сохраним ссылку на полный прогноз, сохраним погоду сейчас, далее нам понадобится в цикле перебрать оставшиеся часы и так же сохранить их в словаре.

Далее нам нужно получить погоду от яндекса:

Начинаем стандартно, но есть нюанс направление ветра и состояние неба в ответе от яндекса пишется на английском языке, делаем словари conditions и wind_dir для перевода. В ответе только фактическая погода и прогноз на следующих два периода (можно сделать и более подробно, но в бесплатном варианте только так). Сразу в словаре меняем направление ветра и состояние неба. Далее создаем новый словарь и забираем только то что нам нужно из всего ответа. При отладке кода стоит отметить, что в бесплатной версии api яндекса допускается только 50 запросов в сутки.

Далее нам стоит написать функции которые будут отправлять ответом прогнозы. Начнем с аккувезер:

В эту функцию мы должны погрузить вывод функции weather и сообщение на которое мы отвечаем. В самой функции мы отправляем сообщение с текстом и ссылками на тот словарь из функции weather. В конце отправляем сообщение со ссылкой на полный прогноз.

Далее делаем сообщение с погодой от яндекса:

здесь так же скармливаем функции выход функции yandex_weather и сообщение на которое отвечаем. Здесь создаем словарь с переводом времени дня, затем отправляем сообщение, далее задаем цикл по ключам словаря из выхода функции yandex_weather если ключ не link то отправляем сообщение: температура <время дня>, на небе <состояние неба>. В конце отправляем ссылку на яндекс (это требование яндекса).

И наконец обобщающая функция:

В нее мы погружаем сообщение и город. Определяем координаты, запрашиваем accuweather и пишем сообщение на основе данных от него, потом тоже самое от яндекса.

Нужна ещё функция сохранения городов:

Сперва проверяем существование такого города если все ок то все что после слова город сохраняем в словарь cities под ключом id пользователя. Можно было бы использовать имя, но это только если Вы уверены, что сервисом будут пользоваться люди с разными именами.

Так все вспомогательные функции мы описали теперь функции ответа на сообщения:

Здесь мы просто представляемся при первом посещении.

А вот и самая большая функция:

В первой части если автор сообщения сказал «привет» или «здарова» мы просто здороваемся и напоминаем, то что мы ждем от автора сообщения.

Если написал «погода» то уточняемся есть ли он в нашем списке и если есть, то сообщаем название города и выполняем функцию big_weather.

Если пользователя нет, то предлагаем ему задать его стандартный город.

Если пользователь написал «Мой город *****», то пользователя. И сообщаем что город записан, если что-то пошло не так, то сообщаем об этом.

Во всех остальных случаях мы сообщение воспринимаем как название города. Если города такого не находится то сообщаем об этом.

ну и собственно нам нужно записать всю программу (это наверное самое короткое):

Здесь мы создаем объект bot, потом открываем json файл с архивом городов и id пользователей. И наконец запускаем в бесконечном цикле бота.

На этом можно закончить, но в целом функционал можно расширять, можно было бы добавить гисметео или rp5, но у этих товарищей нет бесплатных версий прогноза L.

И теперь нам нужно все это запустить на сервере.

Для этого нам нужен собственно сам сервер я например арендовал на джино, это не реклама просто констатация факта. это обходится 3,19 рублей в день.

погодное приложение на python. eb721d49eda1e0725d7e26973206ec8b. погодное приложение на python фото. погодное приложение на python-eb721d49eda1e0725d7e26973206ec8b. картинка погодное приложение на python. картинка eb721d49eda1e0725d7e26973206ec8b.

Для создания своего аккаунта достаточно иметь аккаунт в google. Для целей телеграмм бота достаточно самого дешевого сервера.

погодное приложение на python. 0c030907cc39bcb2021997513d4a7534. погодное приложение на python фото. погодное приложение на python-0c030907cc39bcb2021997513d4a7534. картинка погодное приложение на python. картинка 0c030907cc39bcb2021997513d4a7534.

погодное приложение на python. 6740260ad0ed2e648857b22201e713e8. погодное приложение на python фото. погодное приложение на python-6740260ad0ed2e648857b22201e713e8. картинка погодное приложение на python. картинка 6740260ad0ed2e648857b22201e713e8.

И нажимаем создать сервер.

После выделения Вам сервера можно будет попасть в его меню.

погодное приложение на python. 6b78c09aa1a652ca857105d5d1e83706. погодное приложение на python фото. погодное приложение на python-6b78c09aa1a652ca857105d5d1e83706. картинка погодное приложение на python. картинка 6b78c09aa1a652ca857105d5d1e83706.

Здесь можно посмотреть обзор сервера его загруженность и самое главное параметры для ssh соединения и задать пароль для root (это нужно сделать обязательно).

погодное приложение на python. 4a6090147d255687d201060c0496aff3. погодное приложение на python фото. погодное приложение на python-4a6090147d255687d201060c0496aff3. картинка погодное приложение на python. картинка 4a6090147d255687d201060c0496aff3.

Для подключения по SSH нам нужна программа putty она бесплатная. Устанавливаем, запускаем и видим окно:

погодное приложение на python. 7dd901d2faa9e6d4e31936a979412cfb. погодное приложение на python фото. погодное приложение на python-7dd901d2faa9e6d4e31936a979412cfb. картинка погодное приложение на python. картинка 7dd901d2faa9e6d4e31936a979412cfb.

В host-name вписываем хост из данных от джино и подключаемся, появляется командная строка вводим логин root нажимаем enter после чего вводим пароль который мы задали ранее.

Так теперь нам нужно установить python для этого в командной строке пишем

sudo apt install python3

sudo apt install python3-pip

Далее устанавливаем все библиотеки которые устанавливали в начале:

pip install requests

pip install pyTelegramBotAPI

Переходим в каталог cd /usr/bin/

Создаем каталог mkdir telegrambot/

Открываем командную строку в виндовс

Он попросит ввести пароль, вводим пароль от root.

после копирования переходим на окно putty проверяем что все скопировалось командной ls.

В начале статьи я писал что токены сохраним в переменные среды. Мне проще было сделать так:

открываем блокнотом скачанный файл и вписываем наши перменные каждую на отдельной строке:

token_bot=ваш токен для бота

token_accu=ваш токен для accuweather

token_yandex=ваш токен для яндекса

Закрываем putty и открываем его снова. Входим как и ранее. для проверки добавления переменных среды в консоли вводим команду export. Должны отобразиться все переменные среды, включая Ваши.

Источник

Погода-бот: DialogFlow + OpenWeather + Python

Постановка задачи

Задача ставилась следующим образом: написать телеграм-бота, который распознавал бы вопросы о том, какая сегодня погода в том или ином городе и выдавал информацию о погоде.

DialogFlow

Для распознавания человеческой речи как нельзя лучше подходит фреймворк DialogFlow, уже имеющий встроенный в него ML. Давайте приступим к работе.

Переходим по ссылке https://dialogflow.cloud.google.com/, авторизуемся в своем аккаунте гугл и переходим на страницу создания бота. Нажимаем на «Create new agent» и вводим имя агенту: «weather-bot». Выбираем дефолтный язык русский.

погодное приложение на python. 8f86888e27a483d675ff2e7efac35a7c. погодное приложение на python фото. погодное приложение на python-8f86888e27a483d675ff2e7efac35a7c. картинка погодное приложение на python. картинка 8f86888e27a483d675ff2e7efac35a7c.

Основной объект, с которым работает DialogFlow — интенты или намерения. При взаимодействии с ботом всегда срабатывает то или иное намерение, и задача вас как разработчика — сопроводить каждое намерение разнообразными тренировочными фразами, чтобы бот каждый раз максимально правильно угадывал тот или иной интент.

Итак, переходим во вкладку «Intents». При создании бота автоматически создаются два интента: «Default Fallback Intent» и «Default Welcome Intent». Welcome Intent вызывается тогда, когда происходит запуск бота либо вы пишете ему приветственное сообщение. Fallback вызывается во всех случаях, когда бот не понимает, что вы ему пишете, т.е. во всех случаях, когда ни один другой интент не срабатывает. Оставляем дефолтные интенты без изменений и жмем на «Create intent», называя его «get-weather». Именно с этим намерением мы и продолжим работать в данной статье.

погодное приложение на python. a5412491f44083efa1d869fb460a874e. погодное приложение на python фото. погодное приложение на python-a5412491f44083efa1d869fb460a874e. картинка погодное приложение на python. картинка a5412491f44083efa1d869fb460a874e.

Переходим в наш интент «get-weather», затем — во вкладку «Training phrases» и создаем несколько тренировочных фраз, например, таких:

погодное приложение на python. 33f150484fe09d99fa1d2eed6cabd89c. погодное приложение на python фото. погодное приложение на python-33f150484fe09d99fa1d2eed6cabd89c. картинка погодное приложение на python. картинка 33f150484fe09d99fa1d2eed6cabd89c.

Заметим, что 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. b3b23b0a2dac1d7a4f16a3ddaea31663. погодное приложение на python фото. погодное приложение на python-b3b23b0a2dac1d7a4f16a3ddaea31663. картинка погодное приложение на python. картинка b3b23b0a2dac1d7a4f16a3ddaea31663.

Теперь запускаем наше Python-приложение. Осталось совсем немного — подключить интеграцию с Telegram. Переходим на вкладку «Integrations», выбираем телеграм, далее следуем инструкции по получению токена, вставляем токен, и вуаля — приложение готово! Остается его протестировать:

погодное приложение на python. 38d5d9182ec9955cbe8c9bdf73709370. погодное приложение на python фото. погодное приложение на python-38d5d9182ec9955cbe8c9bdf73709370. картинка погодное приложение на python. картинка 38d5d9182ec9955cbe8c9bdf73709370.

Надеюсь, данная статья была вам полезна и сподвигнет на собственные эксперименты в этой области. Код проекта доступен по ссылке.

Источник

Погода на языке Python

погодное приложение на python. %D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0 Python. погодное приложение на python фото. погодное приложение на python-%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0 Python. картинка погодное приложение на python. картинка %D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0 Python.

В этой статье мы рассмотрим как узнать погоду на Python, с использованием библиотеки pyown, вы увидите что это очень просто, думаю будет интересно.

Также посмотрите статью «Python 3 библиотека Pillow для работы с изображением», если вас интересуют различные Python библиотеки.

Установка Python библиотеки pyown:

Как говорилось выше для работы нам нужна библиотека pyown, она будет получать данные от сервера (об этом чуть ниже), и отдавать нам, но чтобы с ней работать нужно её установить, делаем это как обычно через PIP.

Вот какой код пишем в терминале:

Но после того как вы установили библиотеку, на этом ещё не всё подключение.

Получение API kay:

Как говорилось выше, эта библиотека берёт данные из стороннего источника, этот сторонний источник OpenWeather, ключ можно зарегистрировать бесплатно, но будут доступны только базовый функционал, скажем так.

Когда заходим на сайт жмём «Sign in», и там появиться форма входа, если у вас уже есть аккаунт, то просто вводим email и пароль, и входим в систему, если же нет, то чуть ниже жмём на ссылку «Create an Account».

Дальше регистрируем нового пользователя, вот как будет выглядеть форма регистрации:

погодное приложение на python. OpenWither %D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F. погодное приложение на python фото. погодное приложение на python-OpenWither %D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F. картинка погодное приложение на python. картинка OpenWither %D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F.

Тут не чего особенно нет, просто введите данные которые он от вас просит.

После чего вам надо будет создать свою компанию, для которой и будет использоваться API ключ, вот какая форма будет:

погодное приложение на python. OpenWither %D0%BA%D0%B0%D0%BA %D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83qnt API 2. погодное приложение на python фото. погодное приложение на python-OpenWither %D0%BA%D0%B0%D0%BA %D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83qnt API 2. картинка погодное приложение на python. картинка OpenWither %D0%BA%D0%B0%D0%BA %D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83qnt API 2.

Вводите название и тип, но можете оставить его как на скриншоте, нажимаем «save» и у вас будет доступен этот ключ.

Вот как он должен примерно выглядеть:

погодное приложение на python. OpenWeather API key 2 LI. погодное приложение на python фото. погодное приложение на python-OpenWeather API key 2 LI. картинка погодное приложение на python. картинка OpenWeather API key 2 LI.

Теперь вы можете работать с библиотекой.

Узнать погоду в Python с pyown:

Теперь пришло время показать как можно узнать погоду в Python, для примера я вам просто покажу весь скрипт.

Источник

Узнаем текущую погоду и прогноз простеньким скриптом на Python’е

На Хабре есть интересная статья о том, как энтузиасты делают погоду. Энтузиасты делают, а мы воспользуемся плодами их трудов — получим эту самую погоду от OpenWeatherMap.org скриптом на Python’е.

Для получения доступа к сервису погоды придется пройти несложную процедуру регистрации на сайте OpenWeatherMap.org. Сформируем и отправим запрос, разберем ответный пакет в формате JSON, и получим текущую температуру с описанием состояния погоды.

погодное приложение на python. d5b62da07ddf4848b3ef2ea1f267d08c. погодное приложение на python фото. погодное приложение на python-d5b62da07ddf4848b3ef2ea1f267d08c. картинка погодное приложение на python. картинка d5b62da07ddf4848b3ef2ea1f267d08c.

Зарегистрироваться на 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.

Источник

Создать приложение Погода с помощью Flask | питон

Flask — это облегченный фреймворк, написанный на Python. Это легкий, потому что он не требует определенных инструментов или библиотек и позволяет быструю веб-разработку. сегодня мы создадим приложение погоды, используя колбу в качестве веб-фреймворка. это веб-приложение о погоде будет предоставлять текущие обновления информации о городах, в которых проводился поиск.

Базовая настройка:

Создайте файл и назовите его как weather.py

Linux команда для создания файла

Теперь создайте папку шаблонов с именем файла index.html

Команда Linux для создания папки и файла

Папка проекта будет выглядеть так:

погодное приложение на python. bilvoraporrimis165490. погодное приложение на python фото. погодное приложение на python-bilvoraporrimis165490. картинка погодное приложение на python. картинка bilvoraporrimis165490.

from flask import Flask, render_template, request

# импорт json для загрузки данных JSON в словарь python

# urllib.request сделать запрос к api

if request.method = = ‘POST’ :

city = request.form[ ‘city’ ]

# для имени по умолчанию mathura

# ваш ключ API придет сюда

# источник содержит данные json из API

# преобразование данных JSON в словарь

# данные для переменной list_of_data

«country_code» : str (list_of_data[ ‘sys’ ][ ‘country’ ]),

«coordinate» : str (list_of_data[ ‘coord’ ][ ‘lon’ ]) + ‘ ‘

+ str (list_of_data[ ‘coord’ ][ ‘lat’ ]),

«pressure» : str (list_of_data[ ‘main’ ][ ‘pressure’ ]),

«humidity» : str (list_of_data[ ‘main’ ][ ‘humidity’ ]),

if __name__ = = ‘__main__’ :

Теперь вы можете запустить сервер, чтобы увидеть приложение погоды —

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *