مرحباً بالجميع ، في هذه المقالة سأخبرك بكيفية عمل أبسط برقية بوت في Python لإرسال الطقس الحالي في موسكو.
تم إعداد المقالة للمبتدئين في Python الذين يرغبون في معرفة المزيد حول كيفية التفاعل مع الخدمات الخارجية عبر API.
التقنيات وواجهات برمجة التطبيقات:
- بايثون هي لغة برمجة
- قارورة - إطار لإنشاء تطبيقات الويب ،
- Telegram Bot API ،
- واجهة برمجة تطبيقات Weatherstack
- Ngrok هي خدمة لإنشاء نفق مضيف محلي.
كيف سيعمل كل شيء؟
- يكتب المستخدم رسالة برقية إلى البوت.
- يقوم Telegram بإعادة توجيه رسالة المستخدم إلى الخادم.
- يطلب الخادم معلومات الطقس من Weatherstack.
- يرسل الخادم معلومات الطقس إلى Telegram.
- يتلقى المستخدم معلومات الطقس.
بوت تسجيل برقية
في هذه المرحلة ، نحتاج إلى إنشاء روبوت والوصول إليه. للقيام بذلك ، قم بتشغيل برنامج الروبوتbotfather في Telegram باستخدام الأمر أدناه.
/start
نقوم بإنشاء بوت جديد وفقًا للتعليمات الواردة من الرسالة من البوت.
!
يتم إنشاء برنامج التتبُّع ، ولكن إذا كتبت بعض الرسائل إليه ، فلن يتفاعل معه بأي شكل من الأشكال. اصلحه.
تعليمات قارورة
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 — , .
- 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)
يتكون رمز تطبيق Flask بالكامل من 3 وظائف: استقبال الرسائل من Telegram ، وإرسال الرسائل إلى Telegram واستقبال معلومات الطقس من 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}
هذا كل شئ! بهذه الطريقة البسيطة ، قمنا بتعليم برنامج الروبوت لدينا لإخبارنا عن الطقس في موسكو.