Uzziniet, kā izveidot savu pirmo robotu Telegram, izmantojot Python

Iedomājieties, ka ir ziņu bots, kas jums nosūtīs nejaušu jauku suņa attēlu, kad vien vēlaties, izklausās forši vai ne? Pagatavosim vienu!

Šajā apmācībā mēs izmantosim Python 3, python-telegram-bot un publisko API RandomDog .

Šīs apmācības beigās jums būs stresu mazinošs bots, kas jums katru reizi nosūtīs mīļus suņu attēlus, yay!

Darba sākšana

Pirms sākam rakstīt programmu, mums ir jāizveido marķieris mūsu robotam. Marķieris ir nepieciešams, lai piekļūtu telegrammas API un instalētu nepieciešamās atkarības.

1. Izveidojiet jaunu botu vietnē BotFather

Ja vēlaties izveidot robotu Telegram, jums vispirms tas ir “jāreģistrē”, pirms to izmantojat. Kad mēs "reģistrēsim" savu robotu, mēs saņemsim marķieri, lai piekļūtu Telegram API.

Dodieties uz BotFather (ja to atverat darbvirsmā, pārliecinieties, vai jums ir lietotne Telegram), pēc tam izveidojiet jaunu botu, nosūtot /newbotkomandu. Veiciet darbības, līdz saņemat sava robota lietotājvārdu un marķieri. Jūs varat doties uz savu robotu, piekļūstot šim URL: //telegram.me/YOUR_BOT_USERNAME un jūsu pilnvarai vajadzētu izskatīties šādi.

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

2. Instalējiet bibliotēku

Tā kā šai apmācībai izmantosim bibliotēku, instalējiet to, izmantojot šo komandu.

pip3 install python-telegram-bot

Ja bibliotēka ir veiksmīgi instalēta, tad mums ir labi iet.

Uzrakstiet programmu

Izveidosim savu pirmo botu. Šim robotam jāatgriež suņa attēls, kad mēs nosūtām /bopkomandu. Lai to izdarītu, mēs varam izmantot RandomDog publisko APIlai palīdzētu mums ģenerēt nejaušus suņu attēlus.

Mūsu robota darbplūsma ir tik vienkārša kā šī:

piekļūt API -> iegūt attēla URL -> nosūtīt attēlu

1. Importējiet bibliotēkas

Pirmkārt, importējiet visas nepieciešamās bibliotēkas.

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

2. Piekļūstiet API un iegūstiet attēla URL

Izveidosim funkciju, lai iegūtu URL. Izmantojot pieprasījumu bibliotēku, mēs varam piekļūt API un iegūt Json datus.

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

Json datus varat pārbaudīt, //random.dog/woof.jsonpārlūkprogrammā piekļūstot šim URL: Ekrānā redzēsiet kaut ko līdzīgu:

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

Iegūstiet attēla URL, jo mums ir nepieciešams šis parametrs, lai varētu nosūtīt attēlu.

image_url = contents['url']

Aptiniet šo kodu nosauktajā funkcijā get_url().

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

3. Nosūtiet attēlu

Lai nosūtītu ziņojumu / attēlu, mums ir nepieciešami divi parametri, attēla URL un saņēmēja ID - tas var būt grupas ID vai lietotāja ID.

Attēla URL mēs varam iegūt, izsaucot mūsu get_url()funkciju.

url = get_url()

Iegūstiet saņēmēja ID, izmantojot šo kodu:

chat_id = update.message.chat_id

Pēc attēla URL un saņēmēja ID iegūšanas ir pienācis laiks nosūtīt ziņojumu, kas ir attēls.

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

Aptiniet šo kodu funkcijā, ko sauc bop, un pārliecinieties, vai kods izskatās šādi:

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

Visbeidzot, izveidojiet vēl vienu funkciju, ko sauc mainpar mūsu programmas izpildi. Neaizmirstiet nomainītYOUR_TOKEN ar marķieri, kuru mēs iepriekš izveidojām šajā apmācībā.

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

Beigās jūsu kodam vajadzētu izskatīties šādi:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//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. Palaidiet programmu

Satriecošs! Jūs esat pabeidzis savu pirmo programmu. Tagad pārbaudīsim, vai tas darbojas. Saglabājiet failu, nosauciet to main.pyun pēc tam palaidiet to, izmantojot šo komandu.

python3 main.py

Dodieties uz savu telegrammu bot piekļūstot šo URL: //telegram.me/YOUR_BOT_USERNAME. Nosūtiet /bopkomandu. Ja viss darbojas nevainojami, bots atbildēs ar nejaušu suņa attēlu. Jauki vai ne?

Rīcības kļūdas

Great! Now you have a bot that will send you a cute dog image whenever you want.

There is more! The RandomDogAPI not only generates images, but also videos and GIFs. If we access the API and we get a video or GIF, there is an error and the bot won’t send it to you.

Let’s fix this so the bot will only send a message with an image attachment. If we get a video or GIF then we will call the API again until we get an image.

1. Match the file extension using regex

We are going to use a regex to solve this problem.

To distinguish an image from video or GIF, we can take a look at the file extension. We only need the last part of our URL.

//random.dog/*****.JPG

We need to define, first, what file extensions are allowed in our program.

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

Then use the regex to extract the file extension from the URL.

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

Izmantojot šo kodu, izveidojiet funkciju, get_image_url()kas tiek atkārtota URL, līdz tiek iegūts vēlamais faila paplašinājums (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. Mainiet kodu

Lieliski! Tagad pēdējai daļai aizstājiet funkcijas url = get_url()rindiņu bop()ar url = get_image_url(), un jūsu kodam vajadzētu izskatīties šādi:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//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()

Jauki! Visam vajadzētu darboties nevainojami. Lai iegūtu kodu, varat arī apskatīt manu GitHub kontu.

Visbeidzot, apsveicu ar šīs apmācības pabeigšanu, kā arī tagad jums ir foršs Telegram bot.

Lūdzu, atstājiet komentāru, ja domājat, ka manā kodā vai rakstā ir kļūdas, jo es joprojām mācos un vēlos kļūt labāk.

Paldies un veiksmi praktizējoties! :)