首页 > 编程问答 >错误:无法提取上传者 ID - Youtube、Discord.py

错误:无法提取上传者 ID - Youtube、Discord.py

时间:2024-07-23 04:52:31浏览次数:11  
标签:python ffmpeg discord youtube-dl

我在不和谐(discord.py,PYTHON)中有一个非常强大的机器人,它可以在语音通道中播放音乐。它从 youtube (youtube_dl) 获取音乐。它 之前工作得很好 但现在它不想处理任何视频。 我尝试更新 youtube_dl 但仍然不起作用 我到处搜索,但仍然找不到可能对我有帮助的答案。

这是错误: Error: Unable to extract uploader id

错误日志之后和之前没有更多信息。 任何人都可以帮忙吗?

我会留下一些我用于我的机器人的代码...... youtube 设置:

youtube_dl.utils.bug_reports_message = lambda: ''


ytdl_format_options = {
    'format': 'bestaudio/best',
    'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s',
    'restrictfilenames': True,
    'noplaylist': True,
    'nocheckcertificate': True,
    'ignoreerrors': False,
    'logtostderr': False,
    'quiet': True,
    'no_warnings': True,
    'default_search': 'auto',
    'source_address': '0.0.0.0',  # bind to ipv4 since ipv6 addresses cause issues sometimes
}

ffmpeg_options = {
    'options': '-vn',
}

ytdl = youtube_dl.YoutubeDL(ytdl_format_options)


class YTDLSource(discord.PCMVolumeTransformer):
    def __init__(self, source, *, data, volume=0.5):
        super().__init__(source, volume)

        self.data = data

        self.title = data.get('title')
        self.url = data.get('url')
        self.duration = data.get('duration')
        self.image = data.get("thumbnails")[0]["url"]
    @classmethod
    async def from_url(cls, url, *, loop=None, stream=False):
        loop = loop or asyncio.get_event_loop()
        data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url, download=not stream))
        #print(data)

        if 'entries' in data:
            # take first item from a playlist
            data = data['entries'][0]
        #print(data["thumbnails"][0]["url"])
        #print(data["duration"])
        filename = data['url'] if stream else ytdl.prepare_filename(data)
        return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data)

运行音频的大约命令(来自我的机器人):

sessionChanel = message.author.voice.channel
await sessionChannel.connect()
url = matched.group(1)
player = await YTDLSource.from_url(url, loop=client.loop, stream=True)
sessionChannel.guild.voice_client.play(player, after=lambda e: print(
                                       f'Player error: {e}') if e else None)

这个错误「Error: Unable to extract uploader id」通常表示 youtube-dl 在从 YouTube 视频页面抓取信息时遇到问题。由于 YouTube 经常更改其网站布局,因此 youtube-dl 和其他依赖于网站抓取的库可能会停止工作。

以下是遇到的问题的几个可能原因和解决方案:

1. youtube-dl 过时

提到已经尝试更新 youtube-dl,但是请仔细检查是否使用的是最新版本:

python -m pip install --upgrade youtube-dl

2. YouTube 网页结构变更

即使使用最新版本的 youtube-dl,YouTube 最近的更改也可能导致问题。要解决此问题,可以尝试清除 youtube-dl 缓存:

youtube-dl --rm-cache

3. 特定视频问题

有时,问题可能出在尝试播放的特定视频上。它可能是私有的、受地区限制的,或者 YouTube 删除了该视频。尝试播放其他视频以查看问题是否仍然存在。

4. 代理或 VPN 干扰

如果使用的是代理服务器或 VPN,它们可能会干扰 youtube-dl 抓取 YouTube 数据。尝试禁用它们或使用不同的服务器。

5. 缺少依赖项

youtube-dl 依赖于其他库来正常工作。请确保已安装所有必需的依赖项:

python -m pip install -r requirements.txt 

(如果的项目中没有 requirements.txt 文件,请参考 youtube-dl 文档以了解所需的软件包。)

调试建议

  • 启用详细日志记录: 修改的 ytdl_format_options 以包含 'quiet': False 'no_warnings': False 。这将打印更多信息,这可能有助于识别问题。
  • 使用浏览器开发者工具: 使用浏览器的开发者工具(通常通过按 F12 键访问)检查 YouTube 视频页面的网络请求。查找 youtube-dl 尝试提取上传者 ID 时可能发生的任何错误或重定向。
  • 尝试使用其他库: 如果问题仍然存在,请考虑使用替代库,例如 PyTube yt-dlp (youtube-dl 的分支)。

如果在尝试这些解决方案后仍然遇到问题,请在的问题中提供以下信息,以便我更好地帮助:

  • 完整的错误消息和堆栈跟踪
  • 尝试播放的视频 URL
  • 的 youtube-dl 版本
  • 的 Python 版本
  • 正在使用的 Discord.py 版本
  • 是否使用任何代理服务器或 VPN?

标签:python,ffmpeg,discord,youtube-dl
From: 75495800

相关文章

  • 试图理解这个错误:致命的Python错误:PyEval_RestoreThread:该函数必须在持有GIL的情况下
    我有一个小型tkinter应用程序,我一直在其中实现最小的“拖放”,主要作为学习实验。我真正关心的是删除文件的文件路径。一切实际上都工作正常,直到我尝试在拖放后打包标签小部件。下面的最小工作示例。有问题的行会用注释指出。我通常不会在调试方面遇到太多麻烦,但我只是不知......
  • 如何使代码格式再次适用于 Python(Mac 上的 Visual Studio Code)?
    在Mac上,Option+Shift+F现在会显示“没有安装用于‘python’文件的格式化程序”。消息框:我尝试安装这个插件,但没有看到这种情况的变化:我已经为Python安装了这两个插件:但是正如@starball提到的,它可能已经减少了支持现在。......
  • 无法在 python 中安装 pip install expliot - bluepy 的 Building Wheel (pyproject.t
    在此处输入图像描述当我尝试在Windows计算机中通过cmd安装pipinstallexpliot包时,我收到2个错误名称×Buildingwheelforbluepy(pyproject.toml)didnotrunsuccessfully.│exitcode:1**AND**opt=self.warn_dash_deprecation......
  • python 用单斜杠-反斜杠替换url字符串中的双斜杠
    我的URL包含错误的双斜杠(“//”),我需要将其转换为单斜杠。不用说,我想保持“https:”后面的双斜杠不变。可以在字符串中进行此更改的最短Python代码是什么?我一直在尝试使用re.sub,带有冒号否定的正则表达式(即,[^:](//)),但它想要替换整个匹配项(包括前面......
  • 如何使用 Selenium Python 搜索 Excel 文件中的文本
    我有一些数据在Excel文件中。我想要转到Excel文件,然后搜索文本(取自网站表),然后获取该行的所有数据,这些数据将用于在浏览器中填充表格。示例:我希望selenium搜索ST0003然后获取名称,该学生ID的父亲姓名,以便我可以在大学网站中填写此信息。我想我会从网站......
  • Python 套接字请求在很多情况下都会失败
    我在python中尝试了超过5种不同的方法,尽管人们说它在其他论坛上有效,但所有这些方法都惨遭失败。importsocketmessage="test"clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)clientsocket.connect(('1.1.1.1',80))clientsocket.send(mes......
  • Python 网络套接字
    我一直尝试通过Python访问该网站的websocket,但是需要绕过CloudFlare,现在我尝试通过cookie进行绕过,但是这不起作用。我已经尝试在没有cookie的情况下执行此操作,但这也不起作用。importwebsocketimportbase64importosdriver=selenium.webdriver.Firefox()driver.ge......
  • 如何在Python中使用Selenium提取data-v-xxx?
    因为我想查看每个class='num'内的文本是否大于0。如果测试通过,那么我需要获取venuen-name内的文本。我观察到,data-v是相同的。所以我的方法是获取相同的data-v-<hashvalue>来查找场地名称。我尝试了不同的方法来提取,但仍然无法提取。有什么建议吗?这是DOM<div......
  • Python:添加异常上下文
    假设我想提出一个异常并提供额外的处理信息;最好的做法是什么?我想出了以下方法,但对我来说有点可疑:definternal_function():raiseValueError("smellysocks!")defcontext_function():try:internal_function()exceptExceptionase:......
  • 【视频】Python遗传算法GA优化SVR、ANFIS预测证券指数ISE数据-CSDN博客
    全文链接:https://tecdat.cn/?p=37060本文旨在通过应用多种机器学习技术,对交易所的历史数据进行深入分析和预测。我们帮助客户使用了遗传算法GA优化的支持向量回归(SVR)、自适应神经模糊推理系统(ANFIS)等方法,对数据进行了特征选择、数据预处理、模型训练与评估。实验结果表明,这些方法......