diff options
| author | Sergey M․ <dstftw@gmail.com> | 2015-07-09 20:48:38 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2015-07-09 20:48:38 +0600 | 
| commit | 77c6fb5b24c477c9de022f252dc9958a4b3b8b42 (patch) | |
| tree | e5acefe8671a75e8e8338b8d902ada71e1fab515 | |
| parent | 082a0140eff05dfdac1020548a49541fcddd6ec6 (diff) | |
[youtube] Make further DASH manifests not fatal after succeeded one
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 17 | 
1 files changed, 14 insertions, 3 deletions
| diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 6769a009d..3c629d38a 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -798,7 +798,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):          return self._download_webpage(url, video_id, note='Searching for annotations.', errnote='Unable to download video annotations.')      def _parse_dash_manifest( -            self, video_id, dash_manifest_url, player_url, age_gate): +            self, video_id, dash_manifest_url, player_url, age_gate, fatal=True):          def decrypt_sig(mobj):              s = mobj.group(1)              dec_s = self._decrypt_signature(s, video_id, player_url, age_gate) @@ -807,7 +807,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor):          dash_doc = self._download_xml(              dash_manifest_url, video_id,              note='Downloading DASH manifest', -            errnote='Could not download DASH manifest') +            errnote='Could not download DASH manifest', +            fatal=fatal) + +        if dash_doc is False: +            return []          formats = []          for a in dash_doc.findall('.//{urn:mpeg:DASH:schema:MPD:2011}AdaptationSet'): @@ -1161,14 +1165,21 @@ class YoutubeIE(YoutubeBaseInfoExtractor):          # Look for the DASH manifest          if self._downloader.params.get('youtube_include_dash_manifest', True): +            dash_mpd_fatal = True              for dash_manifest_url in dash_mpds:                  dash_formats = {}                  try:                      for df in self._parse_dash_manifest( -                            video_id, dash_manifest_url, player_url, age_gate): +                            video_id, dash_manifest_url, player_url, age_gate, dash_mpd_fatal):                          # Do not overwrite DASH format found in some previous DASH manifest                          if df['format_id'] not in dash_formats:                              dash_formats[df['format_id']] = df +                        # Additional DASH manifests may end up in HTTP Error 403 therefore +                        # allow them to fail without bug report message if we already have +                        # some DASH manifest succeeded. This is temporary workaround to reduce +                        # burst of bug reports until we figure out the reason and whether it +                        # can be fixed at all. +                        dash_mpd_fatal = False                  except (ExtractorError, KeyError) as e:                      self.report_warning(                          'Skipping DASH manifest: %r' % e, video_id) | 
