使用 youtube-dl 搜索 Youtube 视频
Searching Youtube videos using youtube-dl
我正在尝试构建一个 Discord 音乐机器人,我需要使用用户提供的关键字搜索 YouTube。目前我知道如何从 url.
播放
loop = loop or asyncio.get_event_loop()
data = await loop.run_in_executor( None, lambda: ytdl.extract_info(url, download=not stream))
if "entries" in data:
data = data["entries"][0]
filename = data["url"] if stream else ytdl.prepare_filename(data)
return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data)
我不确定 youtube-dl 是否适合使用关键字搜索 YouTube 网址。为此,您可能应该看看 youtube-search。
Youtube_DL 有一个 extract_info
方法可以使用。而不是给它一个link,你只需要像这样传递ytsearch:args
:
from requests import get
from youtube_dl import YoutubeDL
YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'}
def search(arg):
with YoutubeDL(YDL_OPTIONS) as ydl:
try:
get(arg)
except:
video = ydl.extract_info(f"ytsearch:{arg}", download=False)['entries'][0]
else:
video = ydl.extract_info(arg, download=False)
return video
此功能的一些重要事项:
- 它适用于单词和网址
- 如果您进行 youtube 搜索,输出将是一个字典列表。在这种情况下,它将 return 第一个结果
- 它将return一个包含以下信息的字典:
video_infos = search("30 sec video")
#Doesn't contain all the data, some keys are not very important
cleared_data = {
'channel': video['uploader'],
'channel_url': video['uploader_url'],
'title': video['title'],
'description': video['description'],
'video_url': video['webpage_url'],
'duration': video['duration'], #in seconds
'upload_date': video['upload_data'], #YYYYDDMM
'thumbnail': video['thumbnail'],
'audio_source': video['formats'][0]['url'],
'view_count': video['view_count'],
'like_count': video['like_count'],
'dislike_count': video['dislike_count'],
}
我正在尝试构建一个 Discord 音乐机器人,我需要使用用户提供的关键字搜索 YouTube。目前我知道如何从 url.
播放 loop = loop or asyncio.get_event_loop()
data = await loop.run_in_executor( None, lambda: ytdl.extract_info(url, download=not stream))
if "entries" in data:
data = data["entries"][0]
filename = data["url"] if stream else ytdl.prepare_filename(data)
return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data)
我不确定 youtube-dl 是否适合使用关键字搜索 YouTube 网址。为此,您可能应该看看 youtube-search。
Youtube_DL 有一个 extract_info
方法可以使用。而不是给它一个link,你只需要像这样传递ytsearch:args
:
from requests import get
from youtube_dl import YoutubeDL
YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'}
def search(arg):
with YoutubeDL(YDL_OPTIONS) as ydl:
try:
get(arg)
except:
video = ydl.extract_info(f"ytsearch:{arg}", download=False)['entries'][0]
else:
video = ydl.extract_info(arg, download=False)
return video
此功能的一些重要事项:
- 它适用于单词和网址
- 如果您进行 youtube 搜索,输出将是一个字典列表。在这种情况下,它将 return 第一个结果
- 它将return一个包含以下信息的字典:
video_infos = search("30 sec video") #Doesn't contain all the data, some keys are not very important cleared_data = { 'channel': video['uploader'], 'channel_url': video['uploader_url'], 'title': video['title'], 'description': video['description'], 'video_url': video['webpage_url'], 'duration': video['duration'], #in seconds 'upload_date': video['upload_data'], #YYYYDDMM 'thumbnail': video['thumbnail'], 'audio_source': video['formats'][0]['url'], 'view_count': video['view_count'], 'like_count': video['like_count'], 'dislike_count': video['dislike_count'], }