_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.
This commit is contained in:
Random User 2017-03-25 19:38:30 +01:00
parent 03486dbb01
commit c73e330e7a
3 changed files with 18 additions and 17 deletions

View file

@ -2161,18 +2161,24 @@ def _extract_wowza_formats(self, url, video_id, m3u8_entry_protocol='m3u8_native
}) })
return formats return formats
@staticmethod def _find_jwplayer_data(self, webpage, video_id=None, transform_source=js_to_json):
def _find_jwplayer_data(webpage):
mobj = re.search( mobj = re.search(
r'jwplayer\((?P<quote>[\'"])[^\'" ]+(?P=quote)\)\.setup\s*\((?P<options>[^)]+)\)', r'jwplayer\((?P<quote>[\'"])[^\'" ]+(?P=quote)\)\.setup\s*\((?P<options>[^)]+)\)',
webpage) webpage)
if mobj: 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): def _extract_jwplayer_data(self, webpage, video_id, *args, **kwargs):
jwplayer_data = self._parse_json( jwplayer_data = self._find_jwplayer_data(
self._find_jwplayer_data(webpage), video_id, webpage, video_id, transform_source=js_to_json)
transform_source=js_to_json)
return self._parse_jwplayer_data( return self._parse_jwplayer_data(
jwplayer_data, video_id, *args, **kwargs) jwplayer_data, video_id, *args, **kwargs)

View file

@ -2518,14 +2518,10 @@ def _playlist_from_matches(matches, getter=None, ie=None):
self._sort_formats(entry['formats']) self._sort_formats(entry['formats'])
return self.playlist_result(entries) return self.playlist_result(entries)
jwplayer_data_str = self._find_jwplayer_data(webpage) jwplayer_data = self._find_jwplayer_data(
if jwplayer_data_str: webpage, video_id, transform_source=js_to_json)
try: if jwplayer_data:
jwplayer_data = self._parse_json( return self._parse_jwplayer_data(jwplayer_data, video_id)
jwplayer_data_str, video_id, transform_source=js_to_json)
return self._parse_jwplayer_data(jwplayer_data, video_id)
except ExtractorError:
pass
def check_video(vurl): def check_video(vurl):
if YoutubeIE.suitable(vurl): if YoutubeIE.suitable(vurl):

View file

@ -31,9 +31,8 @@ def _real_extract(self, url):
r'<iframe[^>]+src="([^"]+)"', webpage, 'iframe URL') r'<iframe[^>]+src="([^"]+)"', webpage, 'iframe URL')
ifs_page = self._download_webpage(iframe_url, video_id) ifs_page = self._download_webpage(iframe_url, video_id)
jwplayer_data = self._parse_json( jwplayer_data = self._find_jwplayer_data(
self._find_jwplayer_data(ifs_page), ifs_page, video_id, transform_source=js_to_json)
video_id, transform_source=js_to_json)
info_dict = self._parse_jwplayer_data( info_dict = self._parse_jwplayer_data(
jwplayer_data, video_id, require_title=False, base_url=iframe_url) jwplayer_data, video_id, require_title=False, base_url=iframe_url)