Olá pessoal, neste artigo vou explicar como fazer o bot de telegrama mais simples em Python para enviar o clima atual em Moscou.
O artigo é destinado a iniciantes em Python que desejam aprender mais sobre como interagir com serviços externos via API.
Tecnologias e APIs:
- Python é uma linguagem de programação
- Flask - uma estrutura para criar aplicativos da web,
- API de bot de telegrama,
- API do Weatherstack
- Ngrok é um serviço para criar um túnel para o host local.
Como tudo vai funcionar?
- O usuário escreve uma mensagem de telegrama no bot.
- O telegrama encaminha a mensagem do usuário para o servidor.
- O servidor solicita informações sobre o tempo do Weatherstack.
- O servidor envia informações meteorológicas para o Telegram.
- O usuário recebe informações meteorológicas.
Bot de registro de telegrama
Nesta fase, precisamos criar um bot e ter acesso a ele. Para fazer isso, inicie o @botfather bot no Telegram com o comando abaixo.
/start
Criamos um novo bot de acordo com as instruções da mensagem do bot.
!
O bot é criado, mas se você escrever alguma mensagem para ele, ele não reagirá de forma alguma. Consertá-lo.
Ajuda do frasco
O Flask é uma estrutura para criar aplicativos da Web na linguagem de programação Python, usando o kit de ferramentas Werkzeug e o mecanismo de modelo Jinja2. Pertence à categoria dos chamados microframes - estruturas minimalistas de aplicativos da Web que fornecem deliberadamente apenas os recursos mais básicos.
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 — , .
- ngrok.
- .
- HTTP 5000 .
$ ./ngrok http 5000
, Telegram , . , Telegram. POST setWebhook. .
$ curl --location --request POST 'https://api.telegram.org/bot{token}/setWebhook' \
--header 'Content-Type: application/json' \
--data-raw '{
"url": "{url}"
}'
{token} — 840446984:AAFuVTW-FYP5tJVu8mqhc9y4E0j1fr2lCD0, BotFather,
{url} — https://32515a83.ngrok.io, ngrok. . https, Telegram url.
cURL wiki.
"ok": true, .
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
, . 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 {"ok": True}
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{token}/{method}"
data = {"chat_id": chat_id, "text": text}
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{token}/{method}"
data = {"chat_id": chat_id, "text": text}
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 {"ok": True}
current
Weatherstack API .
2 Query Params: access_key — 86a3fe972756lk34a6a042bll348b1e3, , query — , , — Moscow.
.
app = Flask(__name__)
.
def get_weather():
params = {"access_key": "86a3fe972756lk34a6a042bll348b1e3", "query": "Moscow"}
api_result = requests.get('http://api.weatherstack.com/current', params)
api_response = api_result.json()
return f" {api_response['current']['temperature']} "
receive_update()
"pong" .
weather = get_weather()
send_message(chat_id, weather)
O código de todo o aplicativo Flask consiste em 3 funções: recebimento de mensagens do Telegram, envio de mensagens ao Telegram e recebimento de informações meteorológicas do Weatherstack.
from flask import Flask, request
import requests
app = Flask(__name__)
def get_weather():
params = {"access_key": "86a3fe972756lk34a6a042bll348b1e3", "query": "Moscow"}
api_result = requests.get('http://api.weatherstack.com/current', params)
api_response = api_result.json()
return f" {api_response['current']['temperature']} "
def send_message(chat_id, text):
method = "sendMessage"
token = "840446984:AAFuVTW-FYP5tJVu8mqhc9y4E0j1fr2lCD0"
url = f"https://api.telegram.org/bot{token}/{method}"
data = {"chat_id": chat_id, "text": text}
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 {"ok": True}
Isso é tudo! Dessa maneira simples, ensinamos nosso bot a nos informar sobre o clima em Moscou.