Telegram Bot Api, отправка файла без скачивания
Имеется ссылка, к примеру эта. Для отправки этого изображения ботом в телеграме, необходимо сначала получить все байты изображения (по сути, скачать его целиком).
import telebot
import requests
bot = telebot.TeleBot('API_TOKEN')
request = requests.get('https://avatars.mds.yandex.net/get-pdb/1771637/74d3e432-323a-4b24-b410-7577ddc99726/s1200')
response = request.content
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_photo(message.chat.id, response)
bot.polling(none_stop=True)
Изображения весят относительно немного. Но для отправки, например, аудио-файла, который весит 8 МБ придётся ждать несколько секунд для его загрузки с сайта и примерно столько же для отправки его пользователю. Как вариант, использовать предпросмотр в сообщении, где будет прикреплённый файл. Но мне необходима именно прямая отправка файла по определённой ссылке без его скачивания сервером.
Для отправки файла используется bot.send_document(), где обязательным параметром являются байты отправляемого файла. Но для их получения его необходимо скачать, так как он хранится на другом сайте.
Ответы (1 шт):
Вы можете передать ссылку на изображение и не скачивать его на свой сервер.
Пример:
bot.send_photo(message.chat.id, 'https://avatars.mds.yandex.net/get-pdb/1771637/74d3e432-323a-4b24-b410-7577ddc99726/s1200')
Вот, что сказано об этом в документации:
pass an HTTP URL as a String for Telegram to get a photo from the Internet, or upload a new photo using multipart/form-data.
А вот как это реализовано в библиотеке:
if util.is_string(photo):
payload['photo'] = photo
elif util.is_pil_image(photo):
files = {'photo': util.pil_image_to_file(photo)}
else:
files = {'photo': photo}