使用youtube-dl搜索YouTube视频

问题描述

我正在尝试构建Discord Music Bot,并且需要使用用户指定的关键字搜索YouTube。目前,我知道如何通过网址播放。

       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具有可以使用的extract_info方法。不必给它链接,您只需像这样传递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搜索,输出将是字典列表。在这种情况下,它将返回第一个结果
  • 它将返回一个包含以下信息的字典:
    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'],}
    
,

我不确定youtube-dl是否适合使用关键字搜索youtube网址。为此,您可能应该看看youtube-search

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...