diff options
Diffstat (limited to 'youtube_dl/extractor/common.py')
| -rw-r--r-- | youtube_dl/extractor/common.py | 21 | 
1 files changed, 19 insertions, 2 deletions
| diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index f43a0a569..cf3781cd6 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -89,6 +89,10 @@ class InfoExtractor(object):                                   format, irrespective of the file format.                                   -1 for default (order by other properties),                                   -2 or smaller for less than default. +                    * source_preference  Order number for this video source +                                  (quality takes higher priority) +                                 -1 for default (order by other properties), +                                 -2 or smaller for less than default.                      * http_referer  HTTP Referer header value to set.                      * http_method  HTTP method to use for the download.                      * http_headers  A dictionary of additional HTTP headers @@ -138,6 +142,8 @@ class InfoExtractor(object):      Unless mentioned otherwise, the fields should be Unicode strings. +    Unless mentioned otherwise, None is equivalent to absence of information. +      Subclasses of this one should re-define the _real_initialize() and      _real_extract() methods and define a _VALID_URL regexp.      Probably, they should also be added to the list of extractors. @@ -279,6 +285,12 @@ class InfoExtractor(object):              raw_filename = basen + '.dump'              filename = sanitize_filename(raw_filename, restricted=True)              self.to_screen('Saving request to ' + filename) +            # Working around MAX_PATH limitation on Windows (see +            # http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx) +            if os.name == 'nt': +                absfilepath = os.path.abspath(filename) +                if len(absfilepath) > 259: +                    filename = '\\\\?\\' + absfilepath              with open(filename, 'wb') as outf:                  outf.write(webpage_bytes) @@ -334,7 +346,11 @@ class InfoExtractor(object):          try:              return json.loads(json_string)          except ValueError as ve: -            raise ExtractorError('Failed to download JSON', cause=ve) +            errmsg = '%s: Failed to parse JSON ' % video_id +            if fatal: +                raise ExtractorError(errmsg, cause=ve) +            else: +                self.report_warning(errmsg + str(ve))      def report_warning(self, msg, video_id=None):          idstr = '' if video_id is None else '%s: ' % video_id @@ -601,12 +617,13 @@ class InfoExtractor(object):                  audio_ext_preference,                  f.get('filesize') if f.get('filesize') is not None else -1,                  f.get('filesize_approx') if f.get('filesize_approx') is not None else -1, +                f.get('source_preference') if f.get('source_preference') is not None else -1,                  f.get('format_id'),              )          formats.sort(key=_formats_key)      def http_scheme(self): -        """ Either "https:" or "https:", depending on the user's preferences """ +        """ Either "http:" or "https:", depending on the user's preferences """          return (              'http:'              if self._downloader.params.get('prefer_insecure', False) | 
