рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдорд╛рд╕реНрдХреЛ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореМрд╕рдо рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдпрд╣ рд▓реЗрдЦ рдкрд╛рдпрдерди рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдФрд░ рдПрдкреАрдЖрдИ:
- рдкрд╛рдпрдерди рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ
- рдлреНрд▓рд╛рд╕реНрдХ - рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛,
- рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдПрдкреАрдЖрдИ,
- рд╡реЗрджрд░рд╕реНрдЯреИрдХ рдПрдкреАрдЖрдИ
- Ngrok рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╣реИред
рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдЪрд▓реЗрдЧрд╛?
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреЙрдЯ рдХреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддрд╛ рд╣реИред
- рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдлреЙрд░рд╡рд░реНрдб рдХрд░рддрд╛ рд╣реИред
- рд╕рд░реНрд╡рд░ рд╡реЗрджрд░рд╕реНрдЯреИрдХ рд╕реЗ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
- рд╕рд░реНрд╡рд░ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрдВрдЬреАрдХрд░рдг рдмреЙрдЯ
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдмреЙрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ @botfather bot рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
/start
рд╣рдо рдмреЙрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдирдпрд╛ рдмреЙрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред
!
рдмреЙрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рдареАрдХ рдХрд░реЛред
рдлреНрд▓рд╛рд╕реНрдХ рдорджрдж
рдлреНрд▓рд╛рд╕реНрдХ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗрд░реНрдХреЗрдЬрдЧ рдЯреВрд▓рдХрд┐рдЯ, рд╕рд╛рде рд╣реА рдЬрд┐рдВрдЬрд╛ 2 рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рддрдерд╛рдХрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдлреНрд░реЗрдо рдХреА рд╢реНрд░реЗрдгреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдиреНрдпреВрдирддрд░ рдврд╛рдБрдЪреЗ рдЬреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
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)
рд╕рдВрдкреВрд░реНрдг рдлреНрд▓рд╛рд╕реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЛрдб рдореЗрдВ 3 рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ: рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдФрд░ рд╡реЗрджрд░рд╕реНрдЯреИрдХ рд╕реЗ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
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}
рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЗрд╕ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдордиреЗ рдореЙрд╕реНрдХреЛ рдХреЗ рдореМрд╕рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЛ рд╕рд┐рдЦрд╛рдпрд╛ред