روبوت برقية بسيط على قارورة مع تقارير الطقس

مرحباً بالجميع ، في هذه المقالة سأخبرك بكيفية عمل أبسط برقية بوت في Python لإرسال الطقس الحالي في موسكو.


تم إعداد المقالة للمبتدئين في Python الذين يرغبون في معرفة المزيد حول كيفية التفاعل مع الخدمات الخارجية عبر API.


التقنيات وواجهات برمجة التطبيقات:


  • بايثون هي لغة برمجة
  • قارورة - إطار لإنشاء تطبيقات الويب ،
  • Telegram Bot API ،
  • واجهة برمجة تطبيقات Weatherstack
  • Ngrok هي خدمة لإنشاء نفق مضيف محلي.

كيف سيعمل كل شيء؟


  1. يكتب المستخدم رسالة برقية إلى البوت.
  2. يقوم Telegram بإعادة توجيه رسالة المستخدم إلى الخادم.
  3. يطلب الخادم معلومات الطقس من Weatherstack.
  4. يرسل الخادم معلومات الطقس إلى Telegram.
  5. يتلقى المستخدم معلومات الطقس.

بوت تسجيل برقية


في هذه المرحلة ، نحتاج إلى إنشاء روبوت والوصول إليه. للقيام بذلك ، قم بتشغيل برنامج الروبوت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 — , .


  1. ngrok.
  2. .
  3. 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}

هذا كل شئ! بهذه الطريقة البسيطة ، قمنا بتعليم برنامج الروبوت لدينا لإخبارنا عن الطقس في موسكو.


All Articles