Youtube-dl 订阅 mp3

Posted

技术标签:

【中文标题】Youtube-dl 订阅 mp3【英文标题】:Youtube-dl subscription to mp3 【发布时间】:2020-09-30 11:26:21 【问题描述】:

所以我的目标是编写代码,以便它可以自动从我订阅的所有 Youtube 频道下载到 mp3 文件。 我很难处理EO error,这对我来说并不清楚,因此我从来不需要处理它,我已经做过研究,但没有什么可以帮助我,所以这里是代码:

import opml
import feedparser
import youtube_dl
from glob import glob
from pprint import pprint

from time import time, mktime, strptime
from datetime import datetime

if len(glob('last.txt')) == 0:
    f = open ('last.txt' , 'w')
    f.write(str(time()))
    print('Initialized last.txt file for timestamp')
    f.close()
else:
    f = open('last.txt' , 'r')
    content = f.read()
    f.close()
    
    outline = opml.parse('subs.xml')
    
    ptime = datetime.utcfromtimestamp(float(content))
    ftime = time()
    urls = []
    for i in range(0,len(outline[0])):
        urls.append(outline[0][i].xmlUrl)
    print(urls)
    
    videos = []
    for i in range(0,len(urls)):
        print('Parsing through channel '+str(i+1)+' out of '+str(len(urls)), end='\r')
        feed = feedparser.parse(urls[i])
        for j in range(0,len(feed['items'])):
            timef = feed['items'][j]['published_parsed']
            dt = datetime.fromtimestamp(mktime(timef))
            if dt > ptime:
                videos.append(feed['items'][j]['link'])
                
    if len(videos) == 0:
        print('Sorry, no new video found')
    else:
        print(str(len(videos))+' bew vudeis found')
        
    ydl_options = 
            'ignoreerrors' : True,
            'format': 'bestaudio[filesize<30]',
            'keepvideo': False,
            'outtmpl': 'filename',
            'postprocessors': [
                    'key': 'FFmpegExtractAudio',
                    'audioquality': '0',
                    'preferredquality': '320',
            ]
    
     
    with youtube_dl.YoutubeDL(ydl_options) as ydl:
        ydl.download(videos)
        

我尝试了新的 YoutubeManager subs.xml ,尝试了其他具有不同频道的 Youtube 帐户,他们的 subs.xml 没有任何帮助。

这是我的错误输出

runfile('C:/Users/sound/Desktop/PythonProjets/youtubesubscriptions.py', wdir='C:/Users/sound/Desktop/PythonProjets')
Traceback (most recent call last):

  File "<ipython-input-1-ff8a84b96d09>", line 1, in <module>
    runfile('C:/Users/sound/Desktop/PythonProjets/youtubesubscriptions.py', wdir='C:/Users/sound/Desktop/PythonProjets')

  File "C:\Users\sound\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
    execfile(filename, namespace)

  File "C:\Users\sound\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/sound/Desktop/PythonProjets/youtubesubscriptions.py", line 29, in <module>
    outline = opml.parse('subs.xml')

  File "C:\Users\sound\Anaconda3\lib\site-packages\opml\__init__.py", line 67, in parse
    return Opml(lxml.etree.parse(opml_url))

  File "src/lxml/etree.pyx", line 3435, in lxml.etree.parse

  File "src/lxml/parser.pxi", line 1840, in lxml.etree._parseDocument

  File "src/lxml/parser.pxi", line 1866, in lxml.etree._parseDocumentFromURL

  File "src/lxml/parser.pxi", line 1770, in lxml.etree._parseDocFromFile

  File "src/lxml/parser.pxi", line 1163, in lxml.etree._BaseParser._parseDocFromFile

  File "src/lxml/parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc

  File "src/lxml/parser.pxi", line 711, in lxml.etree._handleParseResult

  File "src/lxml/parser.pxi", line 638, in lxml.etree._raiseParseError

OSError: Error reading file 'subs.xml': failed to load external entity "subs.xml"

【问题讨论】:

我觉得我们缺少您的部分代码。这就是你为这个项目所拥有的所有代码吗? 我现在添加了代码的开头,我之前无法发布它,因为它说它的代码太多并且需要更多解释,但这是我所做的知识和研究之外的错误。 【参考方案1】:

错误表明您无权访问该文件。 如果我在我的 PC 上运行 print(opml.parse('subs.xml')),我会收到完全相同的错误消息。 路径错误或者您没有对该文件的读取权限。

您的代码设置方式意味着 python 在您运行 .py 文件的路径中查找该文件。subs.xml 是否与您的 python 文件在同一个文件夹中? 您可以尝试的一种方法是像这样直接链接路径:outline = opml.parse(r'C:\folder_name\subs.xml')

【讨论】:

它总是在同一个文件夹中,我尝试了你的方法:outline = opml.parse(r'C:\Users\sound\Desktop\PythonProjets\subs.xml'),我仍然有这个错误:OSError: Error reading file 'C:\Users\sound\Desktop\PythonProjets\subs.xml': failed to load external entity "file:/C:/Users/sound/Desktop/PythonProjets/subs.xml" 那么您可能对该文件有读取问题。你能把文件放在另一个位置试试吗? 我已经交换到 D 盘,但还是同样的错误。 OSError: Error reading file 'D:\subs.xml': failed to load external entity "file:/D:/subs.xml" 你能试试下面的。在放置 youtubesubscriptions.py 的项目文件夹中创建一个新的 .py 文件,并放入以下内容:import os print(os.access(r'C:\Users\sound\Desktop\PythonProjets\subs.xml', 2)) 当然要确保该文件实际上在那个位置。这将检查您是否对该文件具有读取权限。请告诉我它返回了什么。 所以我现在设法通过了似乎所有不好的问题是我的 xml 文件在 'name.xml' 中已经是 xml 了 :D TypeError: __init__() got an unexpected keyword argument audioquality 不能向你询问更多。我将继续尝试启动我的项目。谢谢@FrozenAra

以上是关于Youtube-dl 订阅 mp3的主要内容,如果未能解决你的问题,请参考以下文章

youtube-dl 使用小记

sh youtube-dl的包装器 - 请参阅http://rg3.github.io/youtube-dl/

youtube-dl取代you-get?

youtube-dl下载常用参数

youtube-dl 最高质量的 DASH 视频和音频,无需人工干预

youtube-dl有时挂起“[ffmpeg]更正容器”