我基本上试图从看起来像是在Youtube-DL中挂钩的状态对象中获取信息,然后我试图将其保存到数据库中。我有一首歌'具有诸如" filename"等属性的对象;我在下载完成后尝试保存,甚至可能会不断更新数据库。
我有四种方法可以做到这一点,但我还没能让他们工作
代码如下所示:
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])
答案 0 :(得分:1)
我在这里得到了答案:https://github.com/rg3/youtube-dl/issues/7120
基本上我的歌曲文件的一对多模型对歌曲请求是错误的 - 重写这种关系允许我使用钩子来进行数据库更新。