我在不和谐(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?