X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fdaum.py;h=c84c5105886c73f613ef3adae1a7e1831be83f1d;hb=49dea4913bea3b8e5c7d65dd932aa68ada526088;hp=cf158c42d6a04be6fb3c060a2d3f6187aa06f85a;hpb=2f0a33d8a3c926f3a81d0e76bd669a8bc57a2cf8;p=youtube-dl diff --git a/youtube_dl/extractor/daum.py b/youtube_dl/extractor/daum.py index cf158c42d..c84c51058 100644 --- a/youtube_dl/extractor/daum.py +++ b/youtube_dl/extractor/daum.py @@ -7,8 +7,10 @@ import itertools from .common import InfoExtractor from ..compat import ( + compat_parse_qs, compat_urllib_parse, compat_urllib_parse_unquote, + compat_urlparse, ) from ..utils import ( int_or_none, @@ -40,7 +42,7 @@ class DaumIE(InfoExtractor): 'info_dict': { 'id': '65139429', 'ext': 'mp4', - 'title': 'md5:a100d65d09cec246d8aa9bde7de45aed', + 'title': '1297회, \'아빠 아들로 태어나길 잘 했어\' 민수, 감동의 눈물[아빠 어디가] 20150118', 'description': 'md5:79794514261164ff27e36a21ad229fc5', 'upload_date': '20150604', 'thumbnail': 're:^https?://.*\.(?:jpg|png)', @@ -117,6 +119,7 @@ class DaumIE(InfoExtractor): class DaumClipIE(InfoExtractor): _VALID_URL = r'https?://(?:m\.)?tvpot\.daum\.net/(?:clip/ClipView.(?:do|tv)|mypot/View.do)\?.*?clipid=(?P\d+)' IE_NAME = 'daum.net:clip' + _URL_TEMPLATE = 'http://tvpot.daum.net/clip/ClipView.do?clipid=%s' _TESTS = [{ 'url': 'http://tvpot.daum.net/clip/ClipView.do?clipid=52554690', @@ -135,6 +138,10 @@ class DaumClipIE(InfoExtractor): 'only_matching': True, }] + @classmethod + def suitable(cls, url): + return False if DaumPlaylistIE.suitable(url) or DaumUserIE.suitable(url) else super(DaumClipIE, cls).suitable(url) + def _real_extract(self, url): video_id = self._match_id(url) clip_info = self._download_json( @@ -162,8 +169,8 @@ class DaumListIE(InfoExtractor): for pagenum in itertools.count(1): list_info = self._download_json( 'http://tvpot.daum.net/mypot/json/GetClipInfo.do?size=48&init=true&order=date&page=%d&%s=%s' % ( - pagenum, list_id_type, list_id), list_id,'Downloading list info - %s' % pagenum) - + pagenum, list_id_type, list_id), list_id, 'Downloading list info - %s' % pagenum) + entries.extend([ self.url_result( 'http://tvpot.daum.net/v/%s' % clip['vid']) @@ -179,10 +186,21 @@ class DaumListIE(InfoExtractor): return name, entries + def _check_clip(self, url, list_id): + query_dict = compat_parse_qs(compat_urlparse.urlparse(url).query) + if 'clipid' in query_dict: + clip_id = query_dict['clipid'][0] + if self._downloader.params.get('noplaylist'): + self.to_screen('Downloading just video %s because of --no-playlist' % clip_id) + return self.url_result(DaumClipIE._URL_TEMPLATE % clip_id, 'DaumClip') + else: + self.to_screen('Downloading playlist %s - add --no-playlist to just download video' % list_id) + class DaumPlaylistIE(DaumListIE): _VALID_URL = r'https?://(?:m\.)?tvpot\.daum\.net/mypot/(?:View\.do|Top\.tv)\?.*?playlistid=(?P[0-9]+)' IE_NAME = 'daum.net:playlist' + _URL_TEMPLATE = 'http://tvpot.daum.net/mypot/View.do?playlistid=%s' _TESTS = [{ 'note': 'Playlist url with clipid', @@ -207,12 +225,16 @@ class DaumPlaylistIE(DaumListIE): } }] - def _real_extract(self, url): - if DaumClipIE.suitable(url) and self._downloader.params.get('noplaylist'): - return self.url_result(url, 'DaumClip') + @classmethod + def suitable(cls, url): + return False if DaumUserIE.suitable(url) else super(DaumPlaylistIE, cls).suitable(url) + def _real_extract(self, url): list_id = self._match_id(url) - self.to_screen('Downloading playlist %s - add --no-playlist to just download video' % list_id) + + clip_result = self._check_clip(url, list_id) + if clip_result: + return clip_result name, entries = self._get_entries(list_id, 'playlistid') @@ -220,7 +242,7 @@ class DaumPlaylistIE(DaumListIE): class DaumUserIE(DaumListIE): - _VALID_URL = r'https?://(?:m\.)?tvpot\.daum\.net/mypot/(?:View|Top)\.do\?.*?ownerid=(?P[0-9a-zA-Z]+)' + _VALID_URL = r'https?://(?:m\.)?tvpot\.daum\.net/mypot/(?:View|Top)\.(?:do|tv)\?.*?ownerid=(?P[0-9a-zA-Z]+)' IE_NAME = 'daum.net:user' _TESTS = [{ @@ -254,17 +276,23 @@ class DaumUserIE(DaumListIE): }, { 'url': 'http://tvpot.daum.net/mypot/Top.do?ownerid=o2scDLIVbHc0', 'only_matching': True, + }, { + 'url': 'http://m.tvpot.daum.net/mypot/Top.tv?ownerid=45x1okb1If50&playlistid=3569733', + 'only_matching': True, }] def _real_extract(self, url): - if DaumClipIE.suitable(url) and self._downloader.params.get('noplaylist'): - return self.url_result(url, 'DaumClip') + list_id = self._match_id(url) - if DaumPlaylistIE.suitable(url): - return self.url_result(url, 'DaumPlaylist') + clip_result = self._check_clip(url, list_id) + if clip_result: + return clip_result + + query_dict = compat_parse_qs(compat_urlparse.urlparse(url).query) + if 'playlistid' in query_dict: + playlist_id = query_dict['playlistid'][0] + return self.url_result(DaumPlaylistIE._URL_TEMPLATE % playlist_id, 'DaumPlaylist') - list_id = self._match_id(url) - self.to_screen('Downloading playlist %s - add --no-playlist to just download video' % list_id) name, entries = self._get_entries(list_id, 'ownerid') return self.playlist_result(entries, list_id, name)