在python中使用youtube-dl使用“ytsearch:string”后获取标题和URL

时间:2018-05-20 06:57:09

标签: python youtube-dl

我一直在研究Discord音乐机器人,它几乎已经完成了。我还有两件事要弄清楚(它们背后有相同的想法)。

我正在使用youtube_dl下载视频,我最近发现有一种方法可以搜索并从youtube中获取热门搜索结果并播放,允许我的不和谐频道上的用户通过输入来播放歌曲他们记得几句话。当我尝试获取将在搜索最佳结果时播放的YouTube视频的标题时出现问题。

下面我列出了一些代码,它们只是简单地显示了我的意思,以及我目前正在使用的内容(如果有更好的方法来执行我想要的任务,请随时向我展示方式)

import youtube_dl

ydl_opts = {
    'quiet': True,
    'skip_download': True,
    'forcetitle': True,
    'forceurl': True,
}

# Extracts information using the "ytsearch:string" method
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    infoSearched = ydl.extract_info("ytsearch:eraser f64")

# Print the available keys
print('\n keys available: \n')
for i in infoSearched:
    print(i)

# Output the information that has potential to be what I am looking for
for i in infoSearched:
    if i is 'webpage_url' or i is 'webpage_url_basename':
        print('\n {}    {}' .format(infoSearched[str(i)], i))

for i in range(2):
    print("\n")

# Extracts information using the actual URL method
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    infoUrlGiven = ydl.extract_info("https://www.youtube.com/watch?v=pb2fwx4O_Ks")

# Outputs the correct information I am looking for
for i in infoUrlGiven:
    if i is 'webpage_url' or i is 'title':
        print('\n {}    {}' .format(infoUrlGiven[str(i)], i))

Output of previous code

我正在尝试获取视频标题和正在使用的实际YouTube网址。当用户自己输入实际URL时,我能够轻松获取该信息(如上所示),但是我不确定在使用“ytsearch:string”方法查找视频时如何提取信息。

“'forcetitle':True”选项将我想要的标题输出到控制台,所以我知道它在某处,我只需要找到一种方法来提取它。至于webpage_URL输出,我不确定我是否能够以这种方式实际获得,因为在搜索第一个结果的情况下'webpage_url'输出的所有内容都返回搜索(“ytsearch:eraser f64”)。

此外,我还包含选项“'forceurl':True”,以便能够说forceurl没有输出我正在寻找的网址。我特意寻找youtube页面的网址,以便我可以自动将歌曲添加到自动播放列表中(不确定我最终是否会这样做,因为由于搜索结果不同可能会出现重复)。

请建议。

1 个答案:

答案 0 :(得分:0)

我认为,当您使用ytsearch:执行extract_info时,它返回的信息字典与使用字符串的url执行extract_info的信息字典不同。

执行ytsearch:时,您将执行以下操作:

infosearched['entries'][0]['webpage_url']

或视频标题:

infosearched['entries'][0]['title']

代替:

infoSearched[str(i)]

我希望有帮助。