Imaginați-vă acest lucru, există un mesaj bot care vă va trimite o imagine aleatoare de câine oricând doriți, sună bine, nu? Să facem una!

Pentru acest tutorial, vom folosi Python 3, python-telegram-bot, și API public RandomDog.

La sfârșitul acestui tutorial, veți avea un bot de ameliorare a stresului, care vă va trimite imagini drăguțe de câine de fiecare dată când aveți nevoie, da!

Noțiuni de bază

Înainte de a începe să scriem programul, trebuie să generăm un simbol pentru botul nostru. Jetonul este necesar pentru a accesa API-ul Telegram și pentru a instala dependențele necesare.

1. Creați un nou bot în BotFather

Dacă doriți să creați un bot în Telegram, trebuie să vă „înregistrați” botul înainte de al utiliza. Când ne „înregistrăm” botul, vom primi simbolul pentru a accesa API-ul Telegram.

Du-te la BotFather (dacă îl deschideți pe desktop, asigurați-vă că aveți aplicația Telegram), apoi creați un nou bot trimițând /newbot comanda. Urmați pașii până când obțineți numele de utilizator și simbolul pentru botul dvs. Puteți accesa botul dvs. accesând această adresă URL: https://telegram.me/YOUR_BOT_USERNAME iar simbolul dvs. ar trebui să arate astfel.

704418931:AAEtcZ*************

2. Instalați biblioteca

Deoarece vom folosi o bibliotecă pentru acest tutorial, instalați-o folosind această comandă.

pip3 install python-telegram-bot

Dacă biblioteca este instalată cu succes, atunci suntem bine să mergem.

Scrieți programul

Să facem primul nostru bot. Acest bot ar trebui să returneze o imagine de câine atunci când trimitem /bop comanda. Pentru a putea face acest lucru, putem folosi API-ul public de la RandomDog pentru a ne ajuta să generăm imagini aleatoare ale câinilor.

Fluxul de lucru al robotului nostru este la fel de simplu ca acesta:

accesați API -> obțineți adresa URL a imaginii -> trimiteți imaginea

1. Importați bibliotecile

În primul rând, importați toate bibliotecile de care avem nevoie.

from telegram.ext import Updater, CommandHandler
import requests
import re

2. Accesați API-ul și obțineți adresa URL a imaginii

Să creăm o funcție pentru a obține adresa URL. Folosind biblioteca de solicitări, putem accesa API-ul și putem obține datele json.

contents = requests.get('https://random.dog/woof.json').json()

Puteți verifica datele json accesând acea adresă URL: https://random.dog/woof.json în browserul dvs. Veți vedea așa ceva pe ecran:

{“url":"https://random.dog/*****.JPG"}

Obțineți adresa URL a imaginii, deoarece avem nevoie de acel parametru pentru a putea trimite imaginea.

image_url = contents['url']

Înfășurați acest cod într-o funcție numită get_url() .

def get_url():
    contents = requests.get('https://random.dog/woof.json').json()    
    url = contents['url']
    return url

3. Trimiteți imaginea

Pentru a trimite un mesaj / imagine avem nevoie de doi parametri, adresa URL a imaginii și ID-ul destinatarului – acesta poate fi ID-ul grupului sau ID-ul utilizatorului.

Putem obține adresa URL a imaginii apelând telefonul nostru get_url() funcţie.

url = get_url()

Obțineți ID-ul destinatarului folosind acest cod:

chat_id = update.message.chat_id

După ce obținem adresa URL a imaginii și ID-ul destinatarului, este timpul să trimitem mesajul, care este o imagine.

bot.send_photo(chat_id=chat_id, photo=url)

Înfășurați acel cod într-o funcție numită bop și asigurați-vă că codul dvs. arată astfel:

def bop(bot, update):
    url = get_url()
    chat_id = update.message.chat_id
    bot.send_photo(chat_id=chat_id, photo=url)

4. Main program

În cele din urmă, creați o altă funcție numită main pentru a rula programul nostru. Nu uitați să vă schimbați YOUR_TOKEN cu simbolul pe care l-am generat mai devreme în acest tutorial.

def main():
    updater = Updater('YOUR_TOKEN')
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('bop',bop))
    updater.start_polling()
    updater.idle()
    
if __name__ == '__main__':
    main()

La final, codul dvs. ar trebui să arate astfel:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import re

def get_url():
    contents = requests.get('https://random.dog/woof.json').json()    
    url = contents['url']
    return url

def bop(bot, update):
    url = get_url()
    chat_id = update.message.chat_id
    bot.send_photo(chat_id=chat_id, photo=url)

def main():
    updater = Updater('YOUR_TOKEN')
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('bop',bop))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

5. Rulați programul

Minunat! Ai terminat primul program. Acum să verificăm dacă funcționează. Salvați fișierul, denumiți-l main.py , apoi executați-l folosind această comandă.

python3 main.py

Accesați botul dvs. de telegramă accesând această adresă URL: https://telegram.me/YOUR_BOT_USERNAME. Trimiteți /bop comanda. Dacă totul funcționează perfect, robotul va răspunde cu o imagine de câine aleatorie. Drăguț nu?

Invata sa construiesti primul bot in Telegram cu Python
O singură imagine generată aleatoriu

Gestionarea erorilor

Grozav! Acum aveți un bot care vă va trimite o imagine drăguță de câine oricând doriți.

Mai sunt! RandomDog API nu generează doar imagini, ci și videoclipuri și GIF-uri. Dacă accesăm API-ul și primim un videoclip sau un GIF, apare o eroare și botul nu ți-l trimite.

Să remediem acest lucru, astfel încât robotul să trimită un mesaj numai cu un atașament de imagine. Dacă obținem un videoclip sau un GIF, atunci vom apela din nou API până vom obține o imagine.

1. Potriviți extensia de fișier folosind regex

Vom folosi o regex pentru a rezolva această problemă.

Pentru a distinge o imagine de video sau GIF, putem arunca o privire asupra extensiei de fișier. Avem nevoie doar de ultima parte a adresei URL.

https://random.dog/*****.JPG

Trebuie să definim, mai întâi, ce extensii de fișiere sunt permise în programul nostru.

allowed_extension = ['jpg','jpeg','png']

Apoi utilizați regex pentru a extrage extensia de fișier din URL.

file_extension = re.search("([^.]*)$",url).group(1).lower()

Folosind acel cod, creați o funcție numită get_image_url() pentru a itera adresa URL până obținem extensia de fișier dorită (jpg, jpeg, png).

def get_image_url():
    allowed_extension = ['jpg','jpeg','png']
    file_extension = ''
    while file_extension not in allowed_extension:
        url = get_url()
        file_extension = re.search("([^.]*)$",url).group(1).lower()
    return url

2. Modifică-ți codul

Grozav! Acum, pentru ultima parte, înlocuiți url = get_url() linie în bop() funcționează cu url = get_image_url() , iar codul dvs. ar trebui să arate astfel:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import re

def get_url():
    contents = requests.get('https://random.dog/woof.json').json()    
    url = contents['url']
    return url

def get_image_url():
    allowed_extension = ['jpg','jpeg','png']
    file_extension = ''
    while file_extension not in allowed_extension:
        url = get_url()
        file_extension = re.search("([^.]*)$",url).group(1).lower()
    return url

def bop(bot, update):
    url = get_image_url()
    chat_id = update.message.chat_id
    bot.send_photo(chat_id=chat_id, photo=url)

def main():
    updater = Updater('YOUR_TOKEN')
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('bop',bop))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

Grozav! Totul ar trebui să ruleze perfect. Puteți verifica, de asemenea, my GitHub cont pentru a obține codul.

În cele din urmă, felicitări pentru finalizarea acestui tutorial, plus că aveți un bot Telegram cool acum.

Vă rugăm să lăsați un comentariu dacă credeți că există erori în codul meu sau în scriere, pentru că încă învăț și vreau să mă îmbunătățesc.

Multumesc si mult noroc practicand! 🙂