aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl/FileDownloader.py
diff options
context:
space:
mode:
Diffstat (limited to 'youtube_dl/FileDownloader.py')
-rw-r--r--youtube_dl/FileDownloader.py29
1 files changed, 26 insertions, 3 deletions
diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py
index d0378fb14..574863e7c 100644
--- a/youtube_dl/FileDownloader.py
+++ b/youtube_dl/FileDownloader.py
@@ -7,6 +7,7 @@ import math
import io
import os
import re
+import shutil
import socket
import subprocess
import sys
@@ -79,6 +80,7 @@ class FileDownloader(object):
updatetime: Use the Last-modified header to set output file timestamps.
writedescription: Write the video description to a .description file
writeinfojson: Write the video description to a .info.json file
+ writethumbnail: Write the thumbnail image to a file
writesubtitles: Write the video subtitles to a file
onlysubtitles: Downloads only the subtitles of the video
allsubtitles: Downloads all the subtitles of the video
@@ -89,6 +91,7 @@ class FileDownloader(object):
keepvideo: Keep the video file after post-processing
min_filesize: Skip files smaller than this size
max_filesize: Skip files larger than this size
+ daterange: A DateRange object, download only if the upload_date is in the range.
"""
params = None
@@ -344,12 +347,13 @@ class FileDownloader(object):
"""Report download progress."""
if self.params.get('noprogress', False):
return
+ clear_line = (u'\x1b[K' if sys.stderr.isatty() and os.name != 'nt' else u'')
if self.params.get('progress_with_newline', False):
self.to_screen(u'[download] %s of %s at %s ETA %s' %
(percent_str, data_len_str, speed_str, eta_str))
else:
- self.to_screen(u'\r[download] %s of %s at %s ETA %s' %
- (percent_str, data_len_str, speed_str, eta_str), skip_eol=True)
+ self.to_screen(u'\r%s[download] %s of %s at %s ETA %s' %
+ (clear_line, percent_str, data_len_str, speed_str, eta_str), skip_eol=True)
self.to_cons_title(u'youtube-dl - %s of %s at %s ETA %s' %
(percent_str.strip(), data_len_str.strip(), speed_str.strip(), eta_str.strip()))
@@ -424,6 +428,11 @@ class FileDownloader(object):
if rejecttitle:
if re.search(rejecttitle, title, re.IGNORECASE):
return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'
+ date = info_dict.get('upload_date', None)
+ if date is not None:
+ dateRange = self.params.get('daterange', DateRange())
+ if date not in dateRange:
+ return u'[download] %s upload date is not in range %s' % (date_from_str(date).isoformat(), dateRange)
return None
def extract_info(self, url, download = True, ie_name = None):
@@ -449,7 +458,7 @@ class FileDownloader(object):
# Warn if the _WORKING attribute is False
if not ie.working():
- self.to_stderr(u'WARNING: the program functionality for this site has been marked as broken, '
+ self.report_warning(u'the program functionality for this site has been marked as broken, '
u'and will probably not work. If you want to go on, use the -i option.')
# Suitable InfoExtractor found
@@ -651,6 +660,20 @@ class FileDownloader(object):
self.report_error(u'Cannot write metadata to JSON file ' + infofn)
return
+ if self.params.get('writethumbnail', False):
+ if 'thumbnail' in info_dict:
+ thumb_format = info_dict['thumbnail'].rpartition(u'/')[2].rpartition(u'.')[2]
+ if not thumb_format:
+ thumb_format = 'jpg'
+ thumb_filename = filename.rpartition('.')[0] + u'.' + thumb_format
+ self.to_screen(u'[%s] %s: Downloading thumbnail ...' %
+ (info_dict['extractor'], info_dict['id']))
+ uf = compat_urllib_request.urlopen(info_dict['thumbnail'])
+ with open(thumb_filename, 'wb') as thumbf:
+ shutil.copyfileobj(uf, thumbf)
+ self.to_screen(u'[%s] %s: Writing thumbnail to: %s' %
+ (info_dict['extractor'], info_dict['id'], thumb_filename))
+
if not self.params.get('skip_download', False):
if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(filename)):
success = True