diff options
| author | Random User <rndusr@posteo.de> | 2017-03-25 19:38:30 +0100 | 
|---|---|---|
| committer | Random User <rndusr@posteo.de> | 2017-03-25 19:38:30 +0100 | 
| commit | c73e330e7adc9c0c15ac51aeea8fbb7dad95351a (patch) | |
| tree | f2b5d00d905bbea3c738831aa49efb9370bc8469 | |
| parent | 03486dbb0133e42074c272f60e24f18c856fdf0d (diff) | |
_find_jwplayer_data() returns dict or None
This simplifies code for callers of `_find_jwplayer_data()` which no longer have
to run `_parse_json()` on the return value.
It also makes sure that `_find_jwplayer_data()` returns either a `dict` or
`None` and nothing else.
| -rw-r--r-- | youtube_dl/extractor/common.py | 18 | ||||
| -rw-r--r-- | youtube_dl/extractor/generic.py | 12 | ||||
| -rw-r--r-- | youtube_dl/extractor/tvnoe.py | 5 | 
3 files changed, 18 insertions, 17 deletions
diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index eb3c091aa..c2ca73ee1 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -2161,18 +2161,24 @@ class InfoExtractor(object):                      })          return formats -    @staticmethod -    def _find_jwplayer_data(webpage): +    def _find_jwplayer_data(self, webpage, video_id=None, transform_source=js_to_json):          mobj = re.search(              r'jwplayer\((?P<quote>[\'"])[^\'" ]+(?P=quote)\)\.setup\s*\((?P<options>[^)]+)\)',              webpage)          if mobj: -            return mobj.group('options') +            try: +                jwplayer_data = self._parse_json(mobj.group('options'), +                                                 video_id=video_id, +                                                 transform_source=transform_source) +            except ExtractorError: +                pass +            else: +                if isinstance(jwplayer_data, dict): +                    return jwplayer_data      def _extract_jwplayer_data(self, webpage, video_id, *args, **kwargs): -        jwplayer_data = self._parse_json( -            self._find_jwplayer_data(webpage), video_id, -            transform_source=js_to_json) +        jwplayer_data = self._find_jwplayer_data( +            webpage, video_id, transform_source=js_to_json)          return self._parse_jwplayer_data(              jwplayer_data, video_id, *args, **kwargs) diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index c8c103ae3..3fe0237b6 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -2518,14 +2518,10 @@ class GenericIE(InfoExtractor):                  self._sort_formats(entry['formats'])              return self.playlist_result(entries) -        jwplayer_data_str = self._find_jwplayer_data(webpage) -        if jwplayer_data_str: -            try: -                jwplayer_data = self._parse_json( -                    jwplayer_data_str, video_id, transform_source=js_to_json) -                return self._parse_jwplayer_data(jwplayer_data, video_id) -            except ExtractorError: -                pass +        jwplayer_data = self._find_jwplayer_data( +            webpage, video_id, transform_source=js_to_json) +        if jwplayer_data: +            return self._parse_jwplayer_data(jwplayer_data, video_id)          def check_video(vurl):              if YoutubeIE.suitable(vurl): diff --git a/youtube_dl/extractor/tvnoe.py b/youtube_dl/extractor/tvnoe.py index 1a5b76bf2..26a5aeae4 100644 --- a/youtube_dl/extractor/tvnoe.py +++ b/youtube_dl/extractor/tvnoe.py @@ -31,9 +31,8 @@ class TVNoeIE(InfoExtractor):              r'<iframe[^>]+src="([^"]+)"', webpage, 'iframe URL')          ifs_page = self._download_webpage(iframe_url, video_id) -        jwplayer_data = self._parse_json( -            self._find_jwplayer_data(ifs_page), -            video_id, transform_source=js_to_json) +        jwplayer_data = self._find_jwplayer_data( +            ifs_page, video_id, transform_source=js_to_json)          info_dict = self._parse_jwplayer_data(              jwplayer_data, video_id, require_title=False, base_url=iframe_url)  | 
