Перейти к содержимому

Ngrok flask python как пользоваться

  • автор:

Как открыть сайт flask (python) в открытый доступ

Есть личным домен (к примеру simple.com). Как открыть эту страницу в открытый доступ с этим доменом, чтобы к примеру я мог с телефона с другого конца города зайти по адресу simple.com и я увидел надпись ‘its works!’ ? Но прошу заметить, что я хочу, чтобы мог зайти не только я, а абсолютно любой человек (или бот 🙂 ). Очень хороший вариант — ngrok, но он даётся на время и + нельзя поставить свой домен. P.S. Короче говоря, как сделать хостинг из своего личного ПК?

Отслеживать
задан 24 ноя 2018 в 16:52
user299380 user299380
36 10 10 бронзовых знаков

И ещё, если посоветуете технологию наподобие nginx, то расскажите поподробней, как открыть доступ к странице для всех, а не только localhost

24 ноя 2018 в 16:53
Почему наподобие, чем сам nginx не угодил?
24 ноя 2018 в 16:56

А по теме вопроса фласк здесь ни при чём, вам нужно получить у провайдера внешний статический IP-адрес и настроить роутер, фаервол и NAT (при их наличии) на использование какого-то TCP-порта, на котором будет работать flask или nginx (для http обычно порт 80)

24 ноя 2018 в 16:58
24 ноя 2018 в 16:59

@user299380 зайти в панель управления доменами на сайте того регистратора, у которого приобретали домен, прописать там NS-записи DNS-хостера. Потом зайти в панель управления доменами DNS-хостера и прописать там A-запись, указывающую на ваш IP-адрес. Иногда регистратор сам предоставляет услугу DNS-хостинга.

Простой Telegram-бот на Flask с информированием о погоде

Всем привет, в этой статье я расскажу как сделать простейшего телеграмм бота на Python для отправки текущей погоды в Москве.

Статья расчитана на новичков в Python, которые бы хотели узнать больше о том, как взаимодействовать с внешними сервисами по API.

Технологии и API:

  • Python — язык программирования,
  • Flask — фреймворк для создания веб-приложений,
  • Telegram Bot API,
  • Weatherstack API,
  • Ngrok — сервис для создания туннеля к localhost.

Как все будет работать?

  1. Пользователь пишет сообщение телеграмм боту.
  2. Telegram пересылает сообщение пользователя на сервер.
  3. Сервер запрашивает информацию о погоде у Weatherstack.
  4. Сервер отсылает информацию о погоде в Telegram.
  5. Пользователь получает информацию о погоде.

Регистрация телеграмм бота

На этом этапе нам нужно создать бота и получить к нему доступы. Для этого запускаем бота botfather в Telegram командой ниже.

/start

Создаем нового бота согласно инструкциям из сообщения от бота.

Регистрация телеграмм бота

!

Бот создан, но если ему написать какое-нибудь сообщение, он никак на него не отреагирует. Исправим это.

Справка о Flask

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

Поддерживается установка посредством пакетного менеджера PyPI, версия 1.0 совместима с Python 2.7, Python 3.3 и выше.

Установка Flask

Для изоляции зависимостей пакетов Python создадим папку проекта и виртуальное окружение. Для этого в терминале выполним команды ниже. Подробнее о виртуальных окружениях.

$ mkdir weather_bot $ cd weather_bot $ python3 -m venv venv

После завершения установки и активации виртуального окружения установим Flask.

(venv)$ pip install Flask

Подробнее на странице Installation.

Запуск простейшего приложения Flask

В директории weather_bot создадим файл app.py с содержимым.

from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'

Запустим полученное приложение.

(venv)$ export FLASK_APP=app.py (venv)$ flask run * Running on http://127.0.0.1:5000/

Перейдем по адресу http://127.0.0.1:5000/ и убедимся, что отображается текст «Hello, World!».
Подробнее на странице Quickstart.

Создание туннеля к localhost с помощью ngrok

Ngrok — это сервис, позволяющий создавать туннели на локальный компьютер пользователя.

  1. Зарегистрируемся на сайте ngrok.
  2. Выполним установку по инструкции.
  3. Запустим HTTP туннель на 5000 порте с помощью команды терминала ниже.
$ ./ngrok http 5000

Получение сообщений из телеграмм бота

Для того, чтобы Telegram пересылал сообщения на наш сервер, нужно сообщить ему адрес. У нас уже создан туннель, поэтому передадим адрес туннеля в Telegram. Это делается с помощью метода POST setWebhook. Подробнее на странице документации.

$ curl --location --request POST 'https://api.telegram.org/bot/setWebhook' \ --header 'Content-Type: application/json' \ --data-raw '< "url": "" >'

где — токен вида 840446984:AAFuVTW-FYP5tJVu8mqhc9y4E0j1fr2lCD0, который нам прислал BotFather,
— адрес вида https://32515a83.ngrok.io, который отобразился в консоли ngrok. Обратите внимание на протокол. Он должен быть https, иначе Telegram не примет url.

Подробнее о cURL на странице wiki.

Если получен ответ «ok»: true, то все в порядке.

Проверим, что сообщения доходят до нашего локального сервера. Для этого в файле app.py обновим код.

from flask import Flask, request app = Flask(__name__) @app.route("/", methods=["GET", "POST"]) def receive_update(): if request.method == "POST": print(request.json) return

Перезапустим Flask. Для этого остановим сервер из терминала комбинацией клавиш Ctrl+C и повторно запустим его.

(venv)$ flask run

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

Сообщение в консоли

!

Ответ на сообщения пользователей

Мы научились получать сообщения от пользователей, но еще не умеем их отправлять. Для проверки отправки сообщений будем отвечать текстом «pong» на все сообщения.

Для отправки сообщений пользователям в API Telegram используется метод sendMessage. Подробнее на странице документации.

Запросы будем делать с помощью библиотеки requests, которой нет в списке стандартных, поэтому установим ее. Для этого в терминале с активированным виртуальным окружением выполним команду нижу.

(venv)$ pip install requests

Добавим строку импорта requests сразу за строкой from flask import Flask, request в app.py .

import requests

Для отправки сообщений нам нужно знать id чата. Его можно вытащить из тела Telegram-запроса.

chat_id = request.json["message"]["chat"]["id"]

Напишем функцию для отправки сообщений, в которую будем передавать id чата и текст сообщения.

def send_message(chat_id, text): method = "sendMessage" token = "840446984:AAFuVTW-FYP5tJVu8mqhc9y4E0j1fr2lCD0" url = f"https://api.telegram.org/bot/" data = requests.post(url, data=data)

Подробнее о библиотеке requests на странице.

Добавим вызов функции send_message() из receive_update() .

send_message(chat_id, "pong")

Вот так выглядит код в файле app.py

from flask import Flask, request import requests app = Flask(__name__) def send_message(chat_id, text): method = "sendMessage" token = "840446984:AAFuVTW-FYP5tJVu8mqhc9y4E0j1fr2lCD0" url = f"https://api.telegram.org/bot/" data = requests.post(url, data=data) @app.route("/", methods=["GET", "POST"]) def receive_update(): if request.method == "POST": print(request.json) chat_id = request.json["message"]["chat"]["id"] send_message(chat_id, "pong") return

Отправка пользователю информации о погоде

Используем метод current Weatherstack API для получения информации о погоде.
Передадим 2 обязательных Query Params: access_key — секретный ключ вида 86a3fe972756lk34a6a042bll348b1e3, который можно получить после регистрации, и query — город, по которому получаем информацию о погоде, в нашем случае — Moscow.

Подробнее на странице документации.

Добавим функцию для получения текущей температуры в Москве после строки app = Flask(__name__) .

def get_weather(): params = api_result = requests.get('http://api.weatherstack.com/current', params) api_response = api_result.json() return f"Сейчас в Москве градусов"

Внутри функции receive_update() вместо сообщения с текстом «pong» передадим погоду.

weather = get_weather() send_message(chat_id, weather)

Код всего Flask-приложения состоит из 3 функций: получения сообщений из Telegram, отправка сообщений в Telegram и получение информации о погоде из Weatherstack.

from flask import Flask, request import requests app = Flask(__name__) def get_weather(): params = api_result = requests.get('http://api.weatherstack.com/current', params) api_response = api_result.json() return f"Сейчас в Москве градусов" def send_message(chat_id, text): method = "sendMessage" token = "840446984:AAFuVTW-FYP5tJVu8mqhc9y4E0j1fr2lCD0" url = f"https://api.telegram.org/bot/" data = requests.post(url, data=data) @app.route("/", methods=["GET", "POST"]) def receive_update(): if request.method == "POST": print(request.json) chat_id = request.json["message"]["chat"]["id"] weather = get_weather() send_message(chat_id, weather) return

Вот и всё! Таким несложным образом мы научили наш бот информировать нас о погоде в Москве.

Запускаем простейший веб-сервер на Python и Flask

21 июня 2016 г. vetal.xp Просмотров: 56994 RSS 1
Примеры Python » Взаимодействие с Интернетом web сервер python, веб сервер на python, сервер на python

Запускаем простейший веб-сервер на Python и Flask

Есть масса вариантов запустить собственный веб-сервер, обрабатывающий поступающие от пользователей HTTP запросы, и возвращающий результат в их браузеры. В данном примере мы рассмотрим создание такого сервера при помощи Python.

Также нам потребуется Flask – специальный инструмент, с помощью которого можно создавать сайты на Python. Это микрофреймворк, имеющий встроенный веб-сервер. Будем предполагать, что вы работаете под Linux-системой, поэтому команды для Windows в рамках этой статьи рассматривать не будем, при желании вы сами сможете найти аналоги. Вообще, если вам нужен качественный ресурс для конкретных целей (особенно коммерческих), то стоит заказать создание сайта у профессионалов. Они разработают для вас уникальный дизайн, продумают структуру, спланируют продвижение и т. д. Мы же рассматриваем просто азы создания веб-сервера.

Устанавливаем нужные библиотеки

Предположим, что Python, pip и virtualenv у вас уже установлены и настроены, соответствующие статьи есть на сайте. Теперь перейдет к загрузке Flask:

 pip install flask 

Если вам больше нравится использовать виртуальные окружениями, то зайдите в его директорию и уже там выполните следующую команду:

 source venv/bin/activate 

Для проверки правильности установки, можно создать файлик server.py, в котором будет такое содержимое:

 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

Для его выполнения воспользуйтесь командой:

 python server.py 

Изначально для работы Flask используется порт 5000. Заходим в браузере на следующий адрес — http://localhost:5000. Если вы увидите такую фразу «Hello World!», значит все сделано правильно.

С помощью Flask можно делать немало интересных штук, к примеру, осуществлять обработку GET и POST параметров.

Теперь нам нужно переработать скрипт так, чтобы он смог принять имя пользователя, а затем вывел приветствие на экране:

 from flask import Flask app = Flask(__name__) @app.route("/", methods=['GET']) def index(username): return "Hello, %s!" % username if __name__ == "__main__": app.run(host='0.0.0.0', port=4567) 

Мы указали, что теперь для работы скрипта будет использоваться порт 4567. Также он будет через адресную строку принимать имя от пользователя. Открываем в браузере следующий адрес: http://localhost:4567/yourname. Ответ должен быть таким: «Hello, yourname». Этим подтверждается успешная работа сервера, он вернул нужную нам строку.

Настройка прокси

Если вы хотите, чтобы вашим сайтом могли пользоваться и другие люди, вам понадобится внешний IP адрес. Разбираетесь в этом или имеете VPS? Тогда у вас не возникнет проблем с этим. Но если это для вас что-то новенькое, то прибегнем к более легкому, но не особо универсальному способу – воспользуемся прокси сервером.

Для этого нам понадобится бесплатная программка ngrok. Он занимается поддержкой постоянного соединения и доставлением вам всех данных, полученных от других людей. Запускаем ее при помощи следующей команды, в параметре указав любой незанятый порт:

 ./ngrok http 4567 

Ответ должен состоять из нескольких строк, а среди них должно быть что-то такое:

 Forwarding http://7e9ea9dc.ngrok.io -> 127.0.0.1:4567 

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

Еще записи по теме

  • Joy Casino. Обзор новых игровых автоматов
  • Топ 10 онлайн-казино: лучшие казино 2020 года
  • Лучшие онлайн-казино: регистрируйтесь только в проверенных местах
  • Фреш казино: ассортимент игр, преимущества
  • Процедура регистрации на БК Зенит – открытый доступ к прибыли
  • Партнерка Пари Mатч – привлекай клиентов и зарабатывай на этом
  • Раскрутить подписчиков на Ютубе бесплатно – как это сделать

Комментариев: 1

Для тестирования (а по описанию это именно этот вариант сервера) можно сделать проще: python -m SimpleHTTPServer 8000 (для Python 2.x) python -m http.server 8000 (Python 3+) Вызвать команды в консоле из папки с файлами сервера

Делаем локальный сервер доступным всему интернету

При разработке веб проекта (не важно на PHP, Django, Flask) бывают случаи когда необходимо быстро продемонстрировать его работу заказчику для уточнения деталей, а так как обычно разработка происходит на локальном компьютере разработчика, то необходимо предварительно выложить проект на удаленный сервер.

Было бы удобней просто дать заказчику временную ссылку, которая даст доступ к проекту запущенному локально у разработчика. Для этих целей есть инструмент ngrok, как его использовать описано в этой заметке.

Установка ngrok на Windows

ngrok доступен под все основные операционные системы, скачать его можно с https://ngrok.com/download. Под Windows доступна как установка через менеджер пакетов Chocolatey, так через скачивания zip архива.

После скачивания архива (содержащего всего один файл) его нужно просто распаковать. На этом собственно установка завершена.

Регистрируемся тут https://dashboard.ngrok.com/login и получаем токен.

Далее в командной строке Windows перейдем в папку с ngrok.exe и выполним команду:

ngrok config add-authtoken 21dwwv1C_ТУТ_ВАШ_ТОКЕН

Как пользоваться ngrok

Например, мы разрабатываем проект на Джанго используя тестовый сервер и хотим показать проект заказчику, как нам это сделать?

Запустим тестовый сервер python manage.py runserver , теперь проект доступен нам по адресу http://127.0.0.1:8000/

Далее в командной строке Windows перейдем в папку с ngrok.exe и выполним следующую команду:

ngrok http 8000

8000 — это порт на котором у нас запущен тестовый сервер Django.

В результате получаем такой вывод:

Вывод ngrok в консоль после запуска

http://f1ff-109-63-232-90.ngrok.io/ это адрес по которому наш локальный сервер доступен в интернете.

Наш тестовый сервер будет доступен по этому адресу до тех пор, пока мы не закроем окно консоли или не нажмем в ней Ctrl + C. После этого, чтобы сервер стал доступен вновь извне с помощью ссылки, нужно заново запустить ngrok.

Попробуем перейти по полученному адресу и уже увидим страницу Джанго, осталось только убрать эту ошибку:

Страница с ошибкой Django при использовании ngrok

Для этого в файле settings.py нашего проекта поправим директиву ALLOWED_HOSTS:

ALLOWED_HOSTS = [ '127.0.0.1', 'localhost', '.ngrok.io']

Перезапускаем сервер Django и теперь все ок:

Начальная страница Django при импользовании ngrok

Вот таким образом мы можем продемонстрировать процесс разработки заказчику.

Заключение

Описанное выше это не все, что можно сделать с помощью ngrok, например мы можем сделать доступ извне к нашей локально запущенной Postgresql (например на порту 5432). Для этого достаточно команды:

Далее мы получим вывод с данными доступа.

Более подробно о работе с ngrok лучше читать в официальной документации https://ngrok.com/docs

Категории

Свежие записи

  • Таблицы в админке WordPress (часть 1)
  • Импорт/экспорт Linux WSL
  • Не печатаются заглавные буквы в PowerShell
  • 1С-Битрикс: Ошибка авторизации! Срок действия пароля истек, необходимо сменить пароль.
  • Несколько конфигураций для проекта Django
  • Django inclusion_tag с разными шаблонами

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

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