python-3.x - 使用 youtube-dl 搜索 Youtube 视频

标签 python-3.x youtube discord.py-rewrite

我正在尝试构建一个 Discord Music Bot,我需要使用用户提供的关键字搜索 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 有一个 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'],
    }
    
  • 关于python-3.x - 使用 youtube-dl 搜索 Youtube 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63388364/

    相关文章:

    html - 如何使用 HTML5 应用程序在 Android 上启用全屏 youtube 视频?

    python - 如何修复 Python 3.x 中 input() 函数中的 NameError?

    python - 在 matplotlib 中更改图形大小和图形格式

    android - 如何将YouTube视频嵌入到特定时间开始的Google Play应用中?

    video - 嵌入自动播放和无控件的youtube视频

    discord py, ctx.guild.members, 只返回 bot

    python - 如何将多个分区的 .gzip 文件读入 Spark Dataframe?

    python - 为什么traceback.print_exc 会为已发送的电子邮件创建空白输出?

    python - discord.py 中的错误处理问题

    python - 是否可以使用不带齿轮的 discord.py 进行面向对象编程?