Задать вопрос
@keksss17
Студент-программист,питонист :)))

Почему бот не отправляет видео в телеграмме?

Хочу сделать бота который отправляет пользователю видео по ссылке из ютуба, но почему то бот сначала "молчит" а потом выдает ошибку: A request to the Telegram API was unsuccessful. The server returned HTTP 504 Gateway Time-out
Может кто знает что делать?Код бота ниже
import requests
from bs4 import BeautifulSoup as BS
import telebot
import config
import pafy

bot = telebot.TeleBot(config.token)
@bot.message_handler(commands=['fantastic'])
def fantasic_message(message):
    v = pafy.new("https://www.youtube.com/watch?v=COwlqqErDbY")
    s = v.getbest()
    bot.send_message(message.chat.id, "Size is %s" % s.get_filesize())
    filename = s.download()
    bot.send_video(message.chat.id, filename)

if __name__ == '__main__':
    bot.infinity_polling()
  • Вопрос задан
  • 914 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Не по той вы, батенька, пошли дорожке. Вы накопипастили код, а разбираться не стали. Я не работал с библиотекой pafy, но за пару минут кое-что нагуглил.
Первое что я сделал, проверил, что хранится в переменной "filename". А там оказалось None. Далее вы отправляете юзеру опять, таки, None. Разумеется, Telegram-серверу такое не понравилось и он вернул вам 504.
Вот набросал за пару минут. Код рабочий, но много костылей:
bot = telebot.TeleBot(config.token)
@bot.message_handler(commands=['fantastic'])
def fantasic_message(message):
    v = pafy.new("https://www.youtube.com/watch?v=COwlqqErDbY")
    s = v.getbest()
    bot.send_message(message.chat.id, "Size is %s" % s.get_filesize())

    videoid = v.videoid # Получаем id видео
    ext = s.extension # Получаем расширение видео
    filename = f'{videoid}.{ext}' # Формируем имя файла на основе id + расширения
    s.download(filename) # Скачиваем видео и сохраняем с именем videoid+расширение

    data = open(filename,'rb') 
    bot.send_video(message.chat.id, data)
    data.close()

if __name__ == '__main__':
    bot.infinity_polling()

PS: Для имени файла выбрал не название видео, а videoid(можно любое рандомное значение), потому что в названии видео могут встречаться "плохие" символы, которые могут не понравится драйверам(NTFS,ext4,etc)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы