如何用Python向Telegram频道发送视频?现有代码运行失败求解决
问题排查及修正方案
错误原因梳理
- 接口路径不完整:Telegram Bot API调用对应方法需要在基础路径后追加方法名,你当前只拼接了bot和token,没有加
sendVideo或者sendDocument方法路径,请求地址本身无效。 - 参数传递逻辑错误:同时传
json和files参数会导致请求格式冲突,上传文件时需要用data参数传递普通表单字段,不能用json参数;且你定义的chat_id值为元组,格式错误,只需传频道ID字符串即可。 - MIME类型配置错误:MP4视频文件的正确MIME类型为
video/mp4,填成video会导致接口识别文件类型失败。 - 定义的
desc参数未使用:发送视频时可以通过caption字段传递视频描述,对应你代码里的desc参数。 - 未做文件流安全处理:直接用
open打开文件没有手动关闭,容易出现文件句柄泄漏。
前置确认项
运行代码前先确认两个前提:
- 你的机器人已经被设为频道管理员,且拥有「发送消息」权限
- 待发送的
{title}.mp4文件和脚本在同一目录下,文件大小不超过50MB(公共Bot API限制最大50MB文件上传,超过需要部署本地Bot API服务)
修正后的可运行代码
import requests def upload_video(title, desc): bot_token = '替换为你自己的bot token' bot_chatID = '@PinkPanthersShow' # 拼接完整的sendVideo接口路径,专门用于发送视频,可直接在频道内显示预览 api_url = f'https://api.telegram.org/bot{bot_token}/sendVideo' # 普通表单参数,不用json格式传递 data = { 'chat_id': bot_chatID, 'caption': desc } # 正确配置视频文件参数 with open(f'{title}.mp4', 'rb') as f: files = { 'video': (f'{title}.mp4', f, 'video/mp4') } r = requests.post(api_url, data=data, files=files) print(r.json()) return r.json()
内容的提问来源于stack exchange,提问作者SMARTNIMA
相关产品推荐
相关产品推荐

