commit: 178663df528dddb1b628b70e4ad167cc97a8ada5
parent ef19739e64e91bb5ca2eeccd3ff6fdefb1a98cce
Author: biwubo <45994985+biwubo@users.noreply.github.com>
Date: Fri, 7 Jun 2019 20:40:47 +0100
[vlive:playlist] Redirect to video extractor when no playlist is found (#20590)
Diffstat:
1 file changed, 40 insertions(+), 17 deletions(-)
diff --git a/youtube_dl/extractor/vlive.py b/youtube_dl/extractor/vlive.py
@@ -332,26 +332,43 @@ class VLiveChannelIE(InfoExtractor):
class VLivePlaylistIE(InfoExtractor):
IE_NAME = 'vlive:playlist'
_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',
'info_dict': {
- 'id': '22912',
- 'title': 'Valentine Day Message from TWICE'
+ 'id': '22867',
+ '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):
mobj = re.match(self._VALID_URL, url)
video_id, playlist_id = mobj.group('video_id', 'id')
- VIDEO_URL_TEMPLATE = 'http://www.vlive.tv/video/%s'
if self._downloader.params.get('noplaylist'):
- self.to_screen(
- 'Downloading just video %s because of --no-playlist' % video_id)
- return self.url_result(
- VIDEO_URL_TEMPLATE % video_id,
- ie=VLiveIE.ie_key(), video_id=video_id)
+ return self._build_video_result(
+ video_id,
+ 'Downloading just video %s because of --no-playlist'
+ % video_id)
self.to_screen(
'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'
% (video_id, playlist_id), playlist_id)
- item_ids = self._parse_json(
- self._search_regex(
- r'playlistVideoSeqs\s*=\s*(\[[^]]+\])', webpage,
- 'playlist video seqs'),
- playlist_id)
+ raw_item_ids = self._search_regex(
+ r'playlistVideoSeqs\s*=\s*(\[[^]]+\])', webpage,
+ 'playlist video seqs', default=None, fatal=False)
+
+ 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 = [
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))
for item_id in item_ids]