From e3bcc40bf00b458e8eca71d0b90219db05e45a21 Mon Sep 17 00:00:00 2001 From: "wayne.workman2012@gmail.com" Date: Sat, 5 Jan 2019 11:25:51 -0600 Subject: [PATCH] Write all video metadata to directory to reduce redundant metadata reading from internet. Greatly speeds up subsequent youtube channel downloading for today's date only. --- youtube_dl/YoutubeDL.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 4493fd0e1..e0428e96e 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -788,9 +788,28 @@ class YoutubeDL(object): if not ie.working(): self.report_warning('The program functionality for this site has been marked as broken, ' 'and will probably not work.') - try: - ie_result = ie.extract(url) + if str(ie_key) == "Youtube": + video_metadata_directory = "/data/video_metadata" + # Check if we already have metadata downloaded for this file. + metadata_path = os.path.join(video_metadata_directory, str(ie_key) + "." + str(url)) + if os.path.isfile(metadata_path): + with open(metadata_path, 'r') as content_file: + try: + ie_result = json.loads(content_file.read()) + except: + ie_result = ie.extract(url) + else: + ie_result = ie.extract(url) + # Write the result here for future use. + with open(metadata_path, 'w') as content_file: + try: + content_file.write(json.dumps(ie_result,indent=4)) + except: + pass + else: + ie_result = ie.extract(url) + if ie_result is None: # Finished already (backwards compatibility; listformats and friends should be moved here) break if isinstance(ie_result, list):