diff options
| -rw-r--r-- | youtube_dl/extractor/vlive.py | 57 | 
1 files changed, 40 insertions, 17 deletions
| diff --git a/youtube_dl/extractor/vlive.py b/youtube_dl/extractor/vlive.py index f75d4e254..6bfbceef2 100644 --- 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] | 
