projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add --load-info option (#972)
[youtube-dl]
/
youtube_dl
/
YoutubeDL.py
diff --git
a/youtube_dl/YoutubeDL.py
b/youtube_dl/YoutubeDL.py
index 50f750593d1dbe54c97bad9946ad36aa5d798bf1..80c056dc8215d7178a6dae023df5e2271add41ce 100644
(file)
--- a/
youtube_dl/YoutubeDL.py
+++ b/
youtube_dl/YoutubeDL.py
@@
-126,12
+126,13
@@
class YoutubeDL(object):
noplaylist: Download single video instead of a playlist if in doubt.
age_limit: An integer representing the user's age in years.
Unsuitable videos for the given age are skipped.
noplaylist: Download single video instead of a playlist if in doubt.
age_limit: An integer representing the user's age in years.
Unsuitable videos for the given age are skipped.
- downloadarchive: File name of a file where all downloads are recorded.
+ download
_
archive: File name of a file where all downloads are recorded.
Videos already present in the file are not downloaded
again.
cookiefile: File name where cookies should be read from and dumped to.
nocheckcertificate:Do not verify SSL certificates
proxy: URL of the proxy server to use
Videos already present in the file are not downloaded
again.
cookiefile: File name where cookies should be read from and dumped to.
nocheckcertificate:Do not verify SSL certificates
proxy: URL of the proxy server to use
+ socket_timeout: Time to wait for unresponsive hosts, in seconds
The following parameters are not used by YoutubeDL itself, they are used by
the FileDownloader:
The following parameters are not used by YoutubeDL itself, they are used by
the FileDownloader:
@@
-146,7
+147,7
@@
class YoutubeDL(object):
_num_downloads = None
_screen_file = None
_num_downloads = None
_screen_file = None
- def __init__(self, params):
+ def __init__(self, params
=None
):
"""Create a FileDownloader object with the given options."""
self._ies = []
self._ies_instances = {}
"""Create a FileDownloader object with the given options."""
self._ies = []
self._ies_instances = {}
@@
-155,6
+156,7
@@
class YoutubeDL(object):
self._download_retcode = 0
self._num_downloads = 0
self._screen_file = [sys.stdout, sys.stderr][params.get('logtostderr', False)]
self._download_retcode = 0
self._num_downloads = 0
self._screen_file = [sys.stdout, sys.stderr][params.get('logtostderr', False)]
+ self.params = {} if params is None else params
if (sys.version_info >= (3,) and sys.platform != 'win32' and
sys.getfilesystemencoding() in ['ascii', 'ANSI_X3.4-1968']
if (sys.version_info >= (3,) and sys.platform != 'win32' and
sys.getfilesystemencoding() in ['ascii', 'ANSI_X3.4-1968']
@@
-164,12
+166,11
@@
class YoutubeDL(object):
u'Assuming --restrict-filenames since file system encoding '
u'cannot encode all charactes. '
u'Set the LC_ALL environment variable to fix this.')
u'Assuming --restrict-filenames since file system encoding '
u'cannot encode all charactes. '
u'Set the LC_ALL environment variable to fix this.')
- params['restrictfilenames'] = True
+
self.
params['restrictfilenames'] = True
- self.params = params
self.fd = FileDownloader(self, self.params)
self.fd = FileDownloader(self, self.params)
- if '%(stitle)s' in self.params
['outtmpl']
:
+ if '%(stitle)s' in self.params
.get('outtmpl', '')
:
self.report_warning(u'%(stitle)s is deprecated. Use the %(title)s and the --restrict-filenames flag(which also secures %(uploader)s et al) instead.')
self._setup_opener()
self.report_warning(u'%(stitle)s is deprecated. Use the %(title)s and the --restrict-filenames flag(which also secures %(uploader)s et al) instead.')
self._setup_opener()
@@
-811,6
+812,12
@@
class YoutubeDL(object):
return self._download_retcode
return self._download_retcode
+ def download_with_info_file(self, info_filename):
+ with open(info_filename, 'r') as f:
+ # TODO: Check for errors
+ info = json.load(f)
+ self.process_ie_result(info, download=True)
+
def post_process(self, filename, ie_info):
"""Run all the postprocessors on the given file."""
info = dict(ie_info)
def post_process(self, filename, ie_info):
"""Run all the postprocessors on the given file."""
info = dict(ie_info)
@@
-837,7
+844,7
@@
class YoutubeDL(object):
def _make_archive_id(self, info_dict):
# Future-proof against any change in case
# and backwards compatibility with prior versions
def _make_archive_id(self, info_dict):
# Future-proof against any change in case
# and backwards compatibility with prior versions
- extractor = info_dict.get('extractor')
+ extractor = info_dict.get('extractor
_key
')
if extractor is None:
if 'id' in info_dict:
extractor = info_dict.get('ie_key') # key in a playlist
if extractor is None:
if 'id' in info_dict:
extractor = info_dict.get('ie_key') # key in a playlist
@@
-875,6
+882,8
@@
class YoutubeDL(object):
@staticmethod
def format_resolution(format, default='unknown'):
@staticmethod
def format_resolution(format, default='unknown'):
+ if format.get('vcodec') == 'none':
+ return 'audio only'
if format.get('_resolution') is not None:
return format['_resolution']
if format.get('height') is not None:
if format.get('_resolution') is not None:
return format['_resolution']
if format.get('height') is not None:
@@
-891,7
+900,8
@@
class YoutubeDL(object):
res = u''
if fdict.get('format_note') is not None:
res += fdict['format_note'] + u' '
res = u''
if fdict.get('format_note') is not None:
res += fdict['format_note'] + u' '
- if fdict.get('vcodec') is not None:
+ if (fdict.get('vcodec') is not None and
+ fdict.get('vcodec') != 'none'):
res += u'%-5s' % fdict['vcodec']
elif fdict.get('vbr') is not None:
res += u'video'
res += u'%-5s' % fdict['vcodec']
elif fdict.get('vbr') is not None:
res += u'video'
@@
-966,7
+976,10
@@
class YoutubeDL(object):
proxy_map.update(handler.proxies)
write_string(u'[debug] Proxy map: ' + compat_str(proxy_map) + u'\n')
proxy_map.update(handler.proxies)
write_string(u'[debug] Proxy map: ' + compat_str(proxy_map) + u'\n')
- def _setup_opener(self, timeout=20):
+ def _setup_opener(self):
+ timeout_val = self.params.get('socket_timeout')
+ timeout = 600 if timeout_val is None else float(timeout_val)
+
opts_cookiefile = self.params.get('cookiefile')
opts_proxy = self.params.get('proxy')
opts_cookiefile = self.params.get('cookiefile')
opts_proxy = self.params.get('proxy')