|
@ -9,6 +9,7 @@ from ..utils import ( |
|
|
determine_ext, |
|
|
determine_ext, |
|
|
float_or_none, |
|
|
float_or_none, |
|
|
int_or_none, |
|
|
int_or_none, |
|
|
|
|
|
smuggle_url, |
|
|
unsmuggle_url, |
|
|
unsmuggle_url, |
|
|
ExtractorError, |
|
|
ExtractorError, |
|
|
) |
|
|
) |
|
@ -18,6 +19,42 @@ class LimelightBaseIE(InfoExtractor): |
|
|
_PLAYLIST_SERVICE_URL = 'http://production-ps.lvp.llnw.net/r/PlaylistService/%s/%s/%s' |
|
|
_PLAYLIST_SERVICE_URL = 'http://production-ps.lvp.llnw.net/r/PlaylistService/%s/%s/%s' |
|
|
_API_URL = 'http://api.video.limelight.com/rest/organizations/%s/%s/%s/%s.json' |
|
|
_API_URL = 'http://api.video.limelight.com/rest/organizations/%s/%s/%s/%s.json' |
|
|
|
|
|
|
|
|
|
|
|
@classmethod |
|
|
|
|
|
def _extract_urls(cls, webpage, source_url): |
|
|
|
|
|
lm = { |
|
|
|
|
|
'Media': 'media', |
|
|
|
|
|
'Channel': 'channel', |
|
|
|
|
|
'ChannelList': 'channel_list', |
|
|
|
|
|
} |
|
|
|
|
|
entries = [] |
|
|
|
|
|
for kind, video_id in re.findall( |
|
|
|
|
|
r'LimelightPlayer\.doLoad(Media|Channel|ChannelList)\(["\'](?P<id>[a-z0-9]{32})', |
|
|
|
|
|
webpage): |
|
|
|
|
|
print('video_id', video_id) |
|
|
|
|
|
entries.append(cls.url_result( |
|
|
|
|
|
smuggle_url( |
|
|
|
|
|
'limelight:%s:%s' % (lm[kind], video_id), |
|
|
|
|
|
{'source_url': source_url}), |
|
|
|
|
|
'Limelight%s' % kind, video_id)) |
|
|
|
|
|
for mobj in re.finditer( |
|
|
|
|
|
# As per [1] class attribute should be exactly equal to |
|
|
|
|
|
# LimelightEmbeddedPlayerFlash but numerous examples seen |
|
|
|
|
|
# that don't exactly match it (e.g. [2]). |
|
|
|
|
|
# 1. http://support.3playmedia.com/hc/en-us/articles/227732408-Limelight-Embedding-the-Captions-Plugin-with-the-Limelight-Player-on-Your-Webpage |
|
|
|
|
|
# 2. http://www.sedona.com/FacilitatorTraining2017 |
|
|
|
|
|
r'''(?sx) |
|
|
|
|
|
<object[^>]+class=(["\'])(?:(?!\1).)*\bLimelightEmbeddedPlayerFlash\b(?:(?!\1).)*\1[^>]*>.*? |
|
|
|
|
|
<param[^>]+ |
|
|
|
|
|
name=(["\'])flashVars\2[^>]+ |
|
|
|
|
|
value=(["\'])(?:(?!\3).)*mediaId=(?P<id>[a-z0-9]{32}) |
|
|
|
|
|
''', webpage): |
|
|
|
|
|
entries.append(cls.url_result( |
|
|
|
|
|
smuggle_url( |
|
|
|
|
|
'limelight:media:%s' % mobj.group('id'), |
|
|
|
|
|
{'source_url': source_url}), |
|
|
|
|
|
'LimelightMedia', mobj.group('id'))) |
|
|
|
|
|
return entries |
|
|
|
|
|
|
|
|
def _call_playlist_service(self, item_id, method, fatal=True, referer=None): |
|
|
def _call_playlist_service(self, item_id, method, fatal=True, referer=None): |
|
|
headers = {} |
|
|
headers = {} |
|
|
if referer: |
|
|
if referer: |
|
|