You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用if-else识别YouTube视频/播放列表链接并执行对应下载逻辑?

解决方案:识别YouTube链接类型并对应执行下载逻辑

问题根源

当前按钮的command同时调用video_audio()和playlist_audio(),导致播放列表链接会先进入单视频处理逻辑,而YouTube()无法解析播放列表URL,直接触发报错。

修复步骤

  1. 添加链接类型判断逻辑:通过检查URL中是否包含播放列表特征标识(playlist或list=)来区分链接类型
  2. 统一处理入口:创建一个主处理函数,根据判断结果调用对应的下载函数
  3. 添加异常捕获:避免无效链接导致程序崩溃

修改后的完整代码

from pytube import YouTube, Playlist
from tkinter import *
import os
import re

# 设置下载目录
if os.name == "nt":
    folder = f"{os.getenv('USERPROFILE')}\\Downloads"
else:
    folder = f"{os.getenv('HOME')}/Downloads"

def playlist_audio():
    get_link = link_field.get().strip()
    p = Playlist(get_link)
    # 修复Playlist视频解析正则(针对部分YouTube页面结构)
    p._video_regex = re.compile(r"\"url\":\"(/watch\?v=[\w-]*a)")
    for video in p.videos:
        mp3_audio = video.streams.filter(only_audio=True).first().download(folder)
        audioconvert(mp3_audio)
    screen.title('转换完成!')

def video_audio():
    get_link = link_field.get().strip()
    screen.title('下载中..')
    mp3_audio = YouTube(get_link).streams.filter(only_audio=True).first().download(folder)
    audioconvert(mp3_audio)
    screen.title('转换完成!')

def audioconvert(mp3_audio):
    base, ext = os.path.splitext(mp3_audio)
    new_file = base + '.mp3'
    os.rename(mp3_audio, new_file)

def download_handler():
    get_link = link_field.get().strip()
    if not get_link:
        screen.title('请输入链接!')
        return
    
    screen.title('处理中..')
    # 判断链接类型,忽略大小写
    if 'playlist' in get_link.lower() or 'list=' in get_link:
        playlist_audio()
    else:
        try:
            video_audio()
        except Exception as e:
            screen.title('错误! 无效链接')
            print(f"错误信息: {e}")

# 创建GUI界面
screen = Tk()
screen.title('YouTube 转 MP3 转换器')
canvas = Canvas(screen, width=400, height=200)
canvas.pack()

link_field = Entry(screen, width=50) 
link_label = Label(screen, text="输入视频或播放列表URL:")

canvas.create_window(200, 90, window=link_field)
canvas.create_window(200, 70, window=link_label)

# 修改按钮绑定的处理函数
download_btn = Button(screen, text="下载并转换", bg='green', padx='20', pady='5',
                      font=('Arial', 12), fg='#fff', command=download_handler)
canvas.create_window(200, 140, window=download_btn)

screen.mainloop()

关键修改说明

  • 新增download_handler()作为统一入口,负责链接类型判断和分发
  • 用lower()处理URL,避免大小写问题导致判断失效
  • 添加空链接检查,提示用户输入内容
  • 单视频处理添加异常捕获,错误时更新窗口标题并打印错误信息
  • 调整窗口标题文案,更符合用户认知

内容的提问来源于stack exchange,提问作者sssssKull

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:50:25