2
我试图基本上得到什么似乎是一个状态对象的Youtube-DL中挂钩的信息,然后我试图保存它到数据库。我有一个包含“文件名”等属性的“歌曲”对象,我试图在下载完成后保存,甚至可能会不断更新数据库并取得进展。YoutubeDL - 如何获得下载完成后的状态对象
有四种方法我能想到的要做到这一点,但我没有能够让他们的工作
- 发送my_hook功能的数据库和歌曲对象,然后将它保存所有在那里,一旦状态==完成。问题是我无法将其他参数传递给钩子,除非我失去了一些东西
- 获取my_hook函数返回d然后保存,问题是我不认为我可以访问它会返回到(youtube -dl源码)
- 获取ydl.download([song.url])返回一个我可以处理的状态对象,我不认为它这样做虽然
- 我不想这样做,但我可以输出以.json文件,并从那里得到它,或者只是猜测文件的名称因为我最初口述它:(
代码如下所示:
def my_hook(d):
if d['status'] == 'finished':
file_tuple = os.path.split(os.path.abspath(d['filename']))
print("Done downloading {}".format(file_tuple[1]))
if d['status'] == 'downloading':
print(d['filename'], d['_percent_str'], d['_eta_str'])
class MyLogger(object):
def debug(self, msg):
pass
def warning(self, msg):
pass
def error(self, msg):
print(msg)
class Downloader(object):
def get_opts(self):
ydl_opts = {
'format': 'bestaudio/best',
'outtmpl': os.path.join(app.config['VIDEOS_FOLDER'], '%(id)s.%(ext)s'),
'logger': MyLogger(),
'progress_hooks': [my_hook],
}
return ydl_opts
def download(self, song):
ydl = youtube_dl.YoutubeDL(self.get_opts())
ydl.download([song.url])