mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-21 20:46:36 -05:00
[cbc] Improve playlist support (closes #11704)
This commit is contained in:
parent
5d4c7daa49
commit
abe8cb763f
1 changed files with 34 additions and 21 deletions
|
@ -90,36 +90,49 @@ class CBCIE(InfoExtractor):
|
||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
'skip': 'Geo-restricted to Canada',
|
'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
|
@classmethod
|
||||||
def suitable(cls, url):
|
def suitable(cls, url):
|
||||||
return False if CBCPlayerIE.suitable(url) else super(CBCIE, cls).suitable(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):
|
def _real_extract(self, url):
|
||||||
display_id = self._match_id(url)
|
display_id = self._match_id(url)
|
||||||
webpage = self._download_webpage(url, display_id)
|
webpage = self._download_webpage(url, display_id)
|
||||||
player_init = self._search_regex(
|
entries = [
|
||||||
r'CBC\.APP\.Caffeine\.initInstance\(({.+?})\);', webpage, 'player init',
|
self._extract_player_init(player_init, display_id)
|
||||||
default=None)
|
for player_init in re.findall(r'CBC\.APP\.Caffeine\.initInstance\(({.+?})\);', webpage)]
|
||||||
if player_init:
|
entries.extend([
|
||||||
player_info = self._parse_json(player_init, display_id, js_to_json)
|
self.url_result('cbcplayer:%s' % media_id, 'CBCPlayer', media_id)
|
||||||
media_id = player_info.get('mediaId')
|
for media_id in re.findall(r'<iframe[^>]+src="[^"]+?mediaId=(\d+)"', webpage)])
|
||||||
if not media_id:
|
return self.playlist_result(
|
||||||
clip_id = player_info['clipId']
|
entries, display_id,
|
||||||
feed = self._download_json(
|
self._og_search_title(webpage, fatal=False),
|
||||||
'http://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{%s}' % clip_id,
|
self._og_search_description(webpage))
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
class CBCPlayerIE(InfoExtractor):
|
class CBCPlayerIE(InfoExtractor):
|
||||||
|
|
Loading…
Reference in a new issue