[vlive:playlist] Redirect to video extractor when no playlist is found (#20590)

This commit is contained in:
biwubo 2019-06-07 20:40:47 +01:00 committed by Sergey M
parent ef19739e64
commit 178663df52
1 changed files with 40 additions and 17 deletions

View File

@ -332,26 +332,43 @@ class VLiveChannelIE(InfoExtractor):
class VLivePlaylistIE(InfoExtractor): class VLivePlaylistIE(InfoExtractor):
IE_NAME = 'vlive:playlist' IE_NAME = 'vlive:playlist'
_VALID_URL = r'https?://(?:(?:www|m)\.)?vlive\.tv/video/(?P<video_id>[0-9]+)/playlist/(?P<id>[0-9]+)' _VALID_URL = r'https?://(?:(?:www|m)\.)?vlive\.tv/video/(?P<video_id>[0-9]+)/playlist/(?P<id>[0-9]+)'
_TEST = { _VIDEO_URL_TEMPLATE = 'http://www.vlive.tv/video/%s'
_TESTS = [{
'url': 'https://www.vlive.tv/video/117956/playlist/117963',
'info_dict': {
'id': '117963',
'title': '아이돌룸(IDOL ROOM) 41회 - (여자)아이들'
},
'playlist_mincount': 10
}, {
'url': 'http://www.vlive.tv/video/22867/playlist/22912', 'url': 'http://www.vlive.tv/video/22867/playlist/22912',
'info_dict': { 'info_dict': {
'id': '22912', 'id': '22867',
'title': 'Valentine Day Message from TWICE' 'ext': 'mp4',
'title': '[V LIVE] Valentine Day Message from MINA',
'creator': "TWICE",
'view_count': int
}, },
'playlist_mincount': 9 'params': {
} 'skip_download': True,
}
}]
def _build_video_result(self, video_id, message):
self.to_screen(message)
return self.url_result(
self._VIDEO_URL_TEMPLATE % video_id,
ie=VLiveIE.ie_key(), video_id=video_id)
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) mobj = re.match(self._VALID_URL, url)
video_id, playlist_id = mobj.group('video_id', 'id') video_id, playlist_id = mobj.group('video_id', 'id')
VIDEO_URL_TEMPLATE = 'http://www.vlive.tv/video/%s'
if self._downloader.params.get('noplaylist'): if self._downloader.params.get('noplaylist'):
self.to_screen( return self._build_video_result(
'Downloading just video %s because of --no-playlist' % video_id) video_id,
return self.url_result( 'Downloading just video %s because of --no-playlist'
VIDEO_URL_TEMPLATE % video_id, % video_id)
ie=VLiveIE.ie_key(), video_id=video_id)
self.to_screen( self.to_screen(
'Downloading playlist %s - add --no-playlist to just download video' 'Downloading playlist %s - add --no-playlist to just download video'
@ -361,15 +378,21 @@ class VLivePlaylistIE(InfoExtractor):
'http://www.vlive.tv/video/%s/playlist/%s' 'http://www.vlive.tv/video/%s/playlist/%s'
% (video_id, playlist_id), playlist_id) % (video_id, playlist_id), playlist_id)
item_ids = self._parse_json( raw_item_ids = self._search_regex(
self._search_regex( r'playlistVideoSeqs\s*=\s*(\[[^]]+\])', webpage,
r'playlistVideoSeqs\s*=\s*(\[[^]]+\])', webpage, 'playlist video seqs', default=None, fatal=False)
'playlist video seqs'),
playlist_id) if not raw_item_ids:
return self._build_video_result(
video_id,
'Downloading just video %s because no playlist was found'
% video_id)
item_ids = self._parse_json(raw_item_ids, playlist_id)
entries = [ entries = [
self.url_result( self.url_result(
VIDEO_URL_TEMPLATE % item_id, ie=VLiveIE.ie_key(), self._VIDEO_URL_TEMPLATE % item_id, ie=VLiveIE.ie_key(),
video_id=compat_str(item_id)) video_id=compat_str(item_id))
for item_id in item_ids] for item_id in item_ids]