|
|
|
@ -90,36 +90,49 @@ class CBCIE(InfoExtractor):
|
|
|
|
|
},
|
|
|
|
|
}],
|
|
|
|
|
'skip': 'Geo-restricted to Canada',
|
|
|
|
|
}, {
|
|
|
|
|
# multiple CBC.APP.Caffeine.initInstance(...)
|
|
|
|
|
'url': 'http://www.cbc.ca/news/canada/calgary/dog-indoor-exercise-winter-1.3928238',
|
|
|
|
|
'info_dict': {
|
|
|
|
|
'title': 'Keep Rover active during the deep freeze with doggie pushups and other fun indoor tasks',
|
|
|
|
|
'id': 'dog-indoor-exercise-winter-1.3928238',
|
|
|
|
|
},
|
|
|
|
|
'playlist_mincount': 6,
|
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def suitable(cls, url):
|
|
|
|
|
return False if CBCPlayerIE.suitable(url) else super(CBCIE, cls).suitable(url)
|
|
|
|
|
|
|
|
|
|
def _extract_player_init(self, player_init, display_id):
|
|
|
|
|
player_info = self._parse_json(player_init, display_id, js_to_json)
|
|
|
|
|
media_id = player_info.get('mediaId')
|
|
|
|
|
if not media_id:
|
|
|
|
|
clip_id = player_info['clipId']
|
|
|
|
|
feed = self._download_json(
|
|
|
|
|
'http://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{%s}' % clip_id,
|
|
|
|
|
clip_id, fatal=False)
|
|
|
|
|
if feed:
|
|
|
|
|
media_id = try_get(feed, lambda x: x['entries'][0]['guid'], compat_str)
|
|
|
|
|
if not media_id:
|
|
|
|
|
media_id = self._download_json(
|
|
|
|
|
'http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253D' + clip_id,
|
|
|
|
|
clip_id)['entries'][0]['id'].split('/')[-1]
|
|
|
|
|
return self.url_result('cbcplayer:%s' % media_id, 'CBCPlayer', media_id)
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
|
display_id = self._match_id(url)
|
|
|
|
|
webpage = self._download_webpage(url, display_id)
|
|
|
|
|
player_init = self._search_regex(
|
|
|
|
|
r'CBC\.APP\.Caffeine\.initInstance\(({.+?})\);', webpage, 'player init',
|
|
|
|
|
default=None)
|
|
|
|
|
if player_init:
|
|
|
|
|
player_info = self._parse_json(player_init, display_id, js_to_json)
|
|
|
|
|
media_id = player_info.get('mediaId')
|
|
|
|
|
if not media_id:
|
|
|
|
|
clip_id = player_info['clipId']
|
|
|
|
|
feed = self._download_json(
|
|
|
|
|
'http://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{%s}' % clip_id,
|
|
|
|
|
clip_id, fatal=False)
|
|
|
|
|
if feed:
|
|
|
|
|
media_id = try_get(feed, lambda x: x['entries'][0]['guid'], compat_str)
|
|
|
|
|
if not media_id:
|
|
|
|
|
media_id = self._download_json(
|
|
|
|
|
'http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253D' + clip_id,
|
|
|
|
|
clip_id)['entries'][0]['id'].split('/')[-1]
|
|
|
|
|
return self.url_result('cbcplayer:%s' % media_id, 'CBCPlayer', media_id)
|
|
|
|
|
else:
|
|
|
|
|
entries = [self.url_result('cbcplayer:%s' % media_id, 'CBCPlayer', media_id) for media_id in re.findall(r'<iframe[^>]+src="[^"]+?mediaId=(\d+)"', webpage)]
|
|
|
|
|
return self.playlist_result(entries)
|
|
|
|
|
entries = [
|
|
|
|
|
self._extract_player_init(player_init, display_id)
|
|
|
|
|
for player_init in re.findall(r'CBC\.APP\.Caffeine\.initInstance\(({.+?})\);', webpage)]
|
|
|
|
|
entries.extend([
|
|
|
|
|
self.url_result('cbcplayer:%s' % media_id, 'CBCPlayer', media_id)
|
|
|
|
|
for media_id in re.findall(r'<iframe[^>]+src="[^"]+?mediaId=(\d+)"', webpage)])
|
|
|
|
|
return self.playlist_result(
|
|
|
|
|
entries, display_id,
|
|
|
|
|
self._og_search_title(webpage, fatal=False),
|
|
|
|
|
self._og_search_description(webpage))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CBCPlayerIE(InfoExtractor):
|
|
|
|
|