diff options
Diffstat (limited to 'youtube_dl/extractor/pbs.py')
| -rw-r--r-- | youtube_dl/extractor/pbs.py | 24 | 
1 files changed, 13 insertions, 11 deletions
| diff --git a/youtube_dl/extractor/pbs.py b/youtube_dl/extractor/pbs.py index cbd1efea0..0d4d709de 100644 --- a/youtube_dl/extractor/pbs.py +++ b/youtube_dl/extractor/pbs.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals  import re  from .common import InfoExtractor +from ..compat import compat_HTTPError  from ..utils import (      ExtractorError,      determine_ext, @@ -433,20 +434,21 @@ class PBSIE(InfoExtractor):                  for vid_id in video_id]              return self.playlist_result(entries, display_id) -        player = self._download_webpage( -            'http://player.pbs.org/portalplayer/%s' % video_id, display_id) - -        info = self._parse_json( -            self._search_regex( -                r'(?s)PBS\.videoData\s*=\s*({.+?});\n', -                player, 'video data', default='{}'), -            display_id, transform_source=js_to_json, fatal=False) - -        # Fallback to old videoInfo API -        if not info: +        try:              info = self._download_json(                  'http://player.pbs.org/videoInfo/%s?format=json&type=partner' % video_id,                  display_id, 'Downloading video info JSON') +        except ExtractorError as e: +            if not isinstance(e.cause, compat_HTTPError) or e.cause.code != 404: +                raise +            # videoInfo API may not work for some videos, fallback to portalplayer API +            player = self._download_webpage( +                'http://player.pbs.org/portalplayer/%s' % video_id, display_id) +            info = self._parse_json( +                self._search_regex( +                    r'(?s)PBS\.videoData\s*=\s*({.+?});\n', +                    player, 'video data', default='{}'), +                display_id, transform_source=js_to_json, fatal=False)          formats = []          for encoding_name in ('recommended_encoding', 'alternate_encoding'): | 
