Hãy tưởng tượng điều này, có một bot tin nhắn sẽ gửi cho bạn một hình ảnh chú chó dễ thương ngẫu nhiên bất cứ khi nào bạn muốn, nghe thật tuyệt phải không? Hãy làm một!
Đối với hướng dẫn này, chúng tôi sẽ sử dụng Python 3, python-telegram-bot, và API công khai con chó ngẫu nhiên.
Vào cuối hướng dẫn này, bạn sẽ có một bot giảm căng thẳng sẽ gửi cho bạn những hình ảnh chú chó dễ thương mỗi khi bạn cần, yay!
Bắt đầu
Trước khi bắt đầu viết chương trình, chúng ta cần tạo mã thông báo cho bot của mình. Cần có mã thông báo để truy cập API Telegram và cài đặt các phụ thuộc cần thiết.
1. Tạo bot mới trong BotFather
Nếu bạn muốn tạo bot trong Telegram, trước tiên bạn phải “đăng ký” bot của mình trước khi sử dụng. Khi chúng tôi “đăng ký” bot của mình, chúng tôi sẽ nhận được mã thông báo để truy cập API Telegram.
Truy cập BotFather (nếu bạn mở nó trên máy tính để bàn, hãy đảm bảo rằng bạn có ứng dụng Telegram), sau đó tạo bot mới bằng cách gửi /newbot
chỉ huy. Làm theo các bước cho đến khi bạn nhận được tên người dùng và mã thông báo cho bot của mình. Bạn có thể truy cập bot của mình bằng cách truy cập URL này: https://telegram.me/YOUR_BOT_USERNAME
và mã thông báo của bạn sẽ trông như thế này.
704418931:AAEtcZ*************
2. Cài đặt thư viện
Vì chúng ta sẽ sử dụng một thư viện cho hướng dẫn này, hãy cài đặt nó bằng lệnh này.
pip3 install python-telegram-bot
Nếu thư viện được cài đặt thành công, thì chúng ta đã sẵn sàng.
Viết chương trình
Hãy tạo bot đầu tiên của chúng ta. Bot này sẽ trả lại hình ảnh con chó khi chúng tôi gửi /bop
chỉ huy. Để có thể làm điều này, chúng ta có thể sử dụng API công khai từ con chó ngẫu nhiên để giúp chúng tôi tạo hình ảnh con chó ngẫu nhiên.
Quy trình làm việc của bot của chúng tôi đơn giản như sau:
truy cập API -> lấy URL hình ảnh -> gửi hình ảnh
1. Nhập thư viện
Đầu tiên, nhập tất cả các thư viện chúng tôi cần.
from telegram.ext import Updater, CommandHandler
import requests
import re
2. Truy cập API và lấy URL hình ảnh
Hãy tạo một hàm để lấy URL. Sử dụng thư viện yêu cầu, chúng tôi có thể truy cập API và lấy dữ liệu json.
contents = requests.get('https://random.dog/woof.json').json()
Bạn có thể kiểm tra dữ liệu json bằng cách truy cập URL đó: https://random.dog/woof.json
trong trình duyệt của bạn. Bạn sẽ thấy một cái gì đó như thế này trên màn hình của bạn:
{“url":"https://random.dog/*****.JPG"}
Nhận URL hình ảnh vì chúng tôi cần tham số đó để có thể gửi hình ảnh.
image_url = contents['url']
Gói mã này vào một chức năng gọi là get_url()
.
def get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return url
3. Gửi hình ảnh
Để gửi tin nhắn/hình ảnh, chúng tôi cần hai tham số, URL của hình ảnh và ID của người nhận — đây có thể là ID nhóm hoặc ID người dùng.
Chúng tôi có thể lấy URL hình ảnh bằng cách gọi get_url()
chức năng.
url = get_url()
Nhận ID của người nhận bằng mã này:
chat_id = update.message.chat_id
Sau khi chúng tôi nhận được URL hình ảnh và ID của người nhận, đã đến lúc gửi tin nhắn, đó là một hình ảnh.
bot.send_photo(chat_id=chat_id, photo=url)
Bọc mã đó trong một chức năng gọi là bop
và đảm bảo rằng mã của bạn trông như thế này:
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
Cuối cùng, tạo một chức năng khác gọi là main
để chạy chương trình của chúng tôi. Đừng quên thay đổi YOUR_TOKEN
với mã thông báo mà chúng tôi đã tạo trước đó trong hướng dẫn này.
def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
Cuối cùng, mã của bạn sẽ trông như thế này:
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. Chạy chương trình
Thật tuyệt vời! Bạn đã hoàn thành chương trình đầu tiên của mình. Bây giờ hãy kiểm tra xem nó có hoạt động không. Lưu tệp, đặt tên cho nó main.py
sau đó chạy nó bằng lệnh này.
python3 main.py
Truy cập bot điện tín của bạn bằng cách truy cập URL này: https://telegram.me/YOUR_BOT_USERNAME
. gửi /bop
chỉ huy. Nếu mọi thứ chạy hoàn hảo, bot sẽ trả lời bằng một hình ảnh con chó ngẫu nhiên. Đáng yêu phải không?

Xử lý lỗi
Tuyệt quá! Bây giờ bạn có một bot sẽ gửi cho bạn hình ảnh chú chó dễ thương bất cứ khi nào bạn muốn.
Có nhiều! Các con chó ngẫu nhiên API không chỉ tạo hình ảnh mà còn cả video và GIF. Nếu chúng tôi truy cập API và chúng tôi nhận được video hoặc GIF, thì đó là lỗi và bot sẽ không gửi cho bạn.
Hãy sửa lỗi này để bot chỉ gửi tin nhắn có tệp đính kèm hình ảnh. Nếu chúng tôi nhận được video hoặc GIF thì chúng tôi sẽ gọi lại API cho đến khi chúng tôi nhận được hình ảnh.
1. Khớp phần mở rộng tệp bằng regex
Chúng tôi sẽ sử dụng một biểu thức chính quy để giải quyết vấn đề này.
Để phân biệt hình ảnh với video hoặc GIF, chúng ta có thể xem phần mở rộng của tệp. Chúng tôi chỉ cần phần cuối cùng của URL của chúng tôi.
https://random.dog/*****.JPG
Trước tiên, chúng ta cần xác định phần mở rộng tệp nào được phép trong chương trình của mình.
allowed_extension = ['jpg','jpeg','png']
Sau đó, sử dụng biểu thức chính quy để trích xuất phần mở rộng tệp từ URL.
file_extension = re.search("([^.]*)$",url).group(1).lower()
Sử dụng mã đó, tạo một hàm gọi là get_image_url()
để lặp lại URL cho đến khi chúng tôi nhận được phần mở rộng tệp mà chúng tôi muốn (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. Sửa mã của bạn
Tuyệt quá! Bây giờ cho phần cuối cùng, thay thế url = get_url()
dòng trong bop()
chức năng với url = get_image_url()
và mã của bạn sẽ trông như thế này:
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()
Tốt đẹp! Mọi thứ nên chạy hoàn hảo. Bạn cũng có thể kiểm tra tài khoản GitHub của tôi để lấy mã.
Cuối cùng, xin chúc mừng bạn đã hoàn thành hướng dẫn này, ngoài ra bạn hiện có một bot Telegram tuyệt vời.
Vui lòng để lại nhận xét nếu bạn nghĩ rằng có bất kỳ lỗi nào trong mã hoặc cách viết của tôi, bởi vì tôi vẫn đang học và tôi muốn cải thiện.
Xin cảm ơn và chúc bạn tập luyện hiệu quả! 🙂