基于Pytube的YouTube视频Telegram机器人两大技术问题求助
问题解决方案
1. Pytube年龄限制视频下载问题
你当前使用use_oauth=True仍无法绕过年龄限制,可尝试以下方案:
- 清除OAuth缓存重新认证:删除本地
~/.pytube目录下的oauth缓存文件,重新运行代码时会弹出浏览器引导你登录YouTube账号,完成认证后生成新的有效凭证。 - 加载登录后的Cookies:手动用浏览器插件(如EditThisCookie)导出YouTube登录状态下的Cookies为JSON格式,再在Pytube中加载:
from pytube import YouTube import json # 读取本地cookies文件 with open('youtube_cookies.json', 'r') as f: cookies = json.load(f) url='https://www.youtube.com/watch?v=m9ezpAUvMC8&pp=ygUPbG92ZSB5b3VyIHZvaWNl' yt = YouTube(url) yt.cookies = cookies # 尝试获取视频流 print(yt.age_restricted) print(yt.streams)
- 替换为YT-DLP库:如果Pytube的OAuth方案始终无效,YT-DLP对年龄限制视频的支持更稳定,可直接用其命令行或Python接口,通过传入登录凭证完成下载。
2. Telegram机器人发送超大视频的简便方法
除了搭建本地服务器,可尝试以下两种轻量方案:
- 以文档形式发送视频:Telegram Bot API的
sendDocument接口支持最大2GB文件上传,只需将视频作为文档发送,用户收到后仍可直接播放。示例代码(基于python-telegram-bot库):
from telegram import Bot bot = Bot(token='你的机器人Token') # 发送视频作为文档 with open('downloaded_video.mp4', 'rb') as f: bot.send_document(chat_id=目标聊天ID, document=f)
- 使用MTProto协议库:改用Pyrogram或Telethon这类基于MTProto的库,它们支持最大4GB的文件上传,无需额外服务器配置,仅需在代码中配置机器人账号即可直接上传大文件。示例(Pyrogram):
from pyrogram import Client app = Client("my_bot", api_id=你的API_ID, api_hash=你的API_HASH, bot_token='你的机器人Token') async def send_big_video(): await app.send_video(chat_id=目标聊天ID, video='downloaded_video.mp4') app.run(send_big_video())
内容的提问来源于stack exchange,提问作者Sanjar Normurodov
相关产品推荐
相关产品推荐

