[limelight] Tolerate empty pc formats (closes #15150, closes #15151, closes #15207)

This commit is contained in:
Sergey M․ 2018-01-10 05:36:03 +07:00
parent 310ea4661d
commit 2b4e1ace4a
No known key found for this signature in database
GPG key ID: 2C393E0F18A9236D

View file

@ -10,6 +10,7 @@
float_or_none, float_or_none,
int_or_none, int_or_none,
smuggle_url, smuggle_url,
try_get,
unsmuggle_url, unsmuggle_url,
ExtractorError, ExtractorError,
) )
@ -220,6 +221,12 @@ def _extract_info(self, streams, mobile_urls, properties):
'subtitles': subtitles, 'subtitles': subtitles,
} }
def _extract_info_helper(self, pc, mobile, i, metadata):
return self._extract_info(
try_get(pc, lambda x: x['playlistItems'][i]['streams'], list) or [],
try_get(mobile, lambda x: x['mediaList'][i]['mobileUrls'], list) or [],
metadata)
class LimelightMediaIE(LimelightBaseIE): class LimelightMediaIE(LimelightBaseIE):
IE_NAME = 'limelight' IE_NAME = 'limelight'
@ -282,10 +289,7 @@ def _real_extract(self, url):
'getMobilePlaylistByMediaId', 'properties', 'getMobilePlaylistByMediaId', 'properties',
smuggled_data.get('source_url')) smuggled_data.get('source_url'))
return self._extract_info( return self._extract_info_helper(pc, mobile, 0, metadata)
pc['playlistItems'][0].get('streams', []),
mobile['mediaList'][0].get('mobileUrls', []) if mobile else [],
metadata)
class LimelightChannelIE(LimelightBaseIE): class LimelightChannelIE(LimelightBaseIE):
@ -326,10 +330,7 @@ def _real_extract(self, url):
'media', smuggled_data.get('source_url')) 'media', smuggled_data.get('source_url'))
entries = [ entries = [
self._extract_info( self._extract_info_helper(pc, mobile, i, medias['media_list'][i])
pc['playlistItems'][i].get('streams', []),
mobile['mediaList'][i].get('mobileUrls', []) if mobile else [],
medias['media_list'][i])
for i in range(len(medias['media_list']))] for i in range(len(medias['media_list']))]
return self.playlist_result(entries, channel_id, pc['title']) return self.playlist_result(entries, channel_id, pc['title'])