Telegram Bot发送YouTube视频报wrong file identifier错误排查
Telegram Bot 发送YouTube视频报错问题定位
报错核心原因
你遇到的Bad Request: wrong file identifier/HTTP URL specified错误,根源是对Telegram Bot API的接口规则理解有误:
bot.send_video方法的video参数仅支持传入Telegram已保存的文件ID、本地视频文件对象、可直接访问视频二进制内容的直链URL,不支持传入YouTube这类视频平台的网页观看链接(也就是你代码里写的https://www.youtube.com/watch?v=xxx格式的地址),Telegram服务器无法从这类网页链接中直接拉取到视频文件,因此会抛出参数错误。
代码存在的其他问题
- 消息监听规则不匹配:你给消息处理器设置的监听内容类型是
["url","video"],但触发逻辑写的是匹配纯文本内容Video,纯文本属于text类型消息,根本不会进入当前的处理函数,即使用户发送了Video关键词,发视频的逻辑也不会执行。 - 流式参数生效前提错误:
supports_streaming=True仅在传入有效视频源时生效,传入YouTube网页链接时,该参数没有任何作用,Telegram无法直接解析YouTube网页内的视频流实现站内流式播放。
可行实现方式
你可以根据需求二选一实现:
- 直接作为普通文本发送YouTube观看链接,Telegram客户端会自动生成链接预览,用户点击即可跳转至对应页面观看。
- 若需要实现Telegram站内流式播放,需要自行获取目标YouTube视频的可直接访问的视频文件直链,或者将视频下载到本地存储,再将直链/本地文件对象传入
send_video方法,同时开启supports_streaming=True参数。
修正后参考代码
import telebot from telebot import types import config bot = telebot.TeleBot(config.token) # 补充text类型监听,才能匹配到用户发送的纯文本"Video"关键词 @bot.message_handler(content_types=["text", "url", "video"]) def handle_text(message): if message.text == 'Video': # 方案1:直接发送链接,靠Telegram自动生成预览 bot.send_message(message.chat.id, "https://www.youtube.com/watch?v=HodO2eBEz_8") # 方案2:传本地视频/有效视频直链实现站内流式播放,替换对应参数即可 # bot.send_video( # chat_id=message.chat.id, # video=open("local_video_file.mp4", "rb"), # supports_streaming=True # ) bot.polling(none_stop=True, interval=0)
内容的提问来源于stack exchange,提问作者Илья Алексашин
相关产品推荐
相关产品推荐

