|
@ -23,7 +23,7 @@ class KuwoBaseIE(InfoExtractor): |
|
|
{'format': 'aac', 'ext': 'aac', 'abr': 48, 'preference': 10} |
|
|
{'format': 'aac', 'ext': 'aac', 'abr': 48, 'preference': 10} |
|
|
] |
|
|
] |
|
|
|
|
|
|
|
|
def _get_formats(self, song_id): |
|
|
|
|
|
|
|
|
def _get_formats(self, song_id, tolerate_ip_deny=False): |
|
|
formats = [] |
|
|
formats = [] |
|
|
for file_format in self._FORMATS: |
|
|
for file_format in self._FORMATS: |
|
|
song_url = self._download_webpage( |
|
|
song_url = self._download_webpage( |
|
@ -32,7 +32,7 @@ class KuwoBaseIE(InfoExtractor): |
|
|
song_id, note='Download %s url info' % file_format['format'], |
|
|
song_id, note='Download %s url info' % file_format['format'], |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
if song_url == 'IPDeny': |
|
|
|
|
|
|
|
|
if song_url == 'IPDeny' and not tolerate_ip_deny: |
|
|
raise ExtractorError('This song is blocked in this region', expected=True) |
|
|
raise ExtractorError('This song is blocked in this region', expected=True) |
|
|
|
|
|
|
|
|
if song_url.startswith('http://') or song_url.startswith('https://'): |
|
|
if song_url.startswith('http://') or song_url.startswith('https://'): |
|
@ -43,7 +43,12 @@ class KuwoBaseIE(InfoExtractor): |
|
|
'preference': file_format['preference'], |
|
|
'preference': file_format['preference'], |
|
|
'abr': file_format.get('abr'), |
|
|
'abr': file_format.get('abr'), |
|
|
}) |
|
|
}) |
|
|
self._sort_formats(formats) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# XXX _sort_formats fails if there are not formats, while it's not the |
|
|
|
|
|
# desired behavior if 'IPDeny' is ignored |
|
|
|
|
|
# This check can be removed if https://github.com/rg3/youtube-dl/pull/8051 is merged |
|
|
|
|
|
if not tolerate_ip_deny: |
|
|
|
|
|
self._sort_formats(formats) |
|
|
return formats |
|
|
return formats |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -288,10 +293,16 @@ class KuwoMvIE(KuwoBaseIE): |
|
|
'url': 'http://www.kuwo.cn/mv/6480076/', |
|
|
'url': 'http://www.kuwo.cn/mv/6480076/', |
|
|
'info_dict': { |
|
|
'info_dict': { |
|
|
'id': '6480076', |
|
|
'id': '6480076', |
|
|
'ext': 'mkv', |
|
|
|
|
|
'title': '我们家MV', |
|
|
|
|
|
|
|
|
'ext': 'mp4', |
|
|
|
|
|
'title': 'My HouseMV', |
|
|
'creator': '2PM', |
|
|
'creator': '2PM', |
|
|
}, |
|
|
}, |
|
|
|
|
|
# In this video, music URLs (anti.s) are blocked outside China and |
|
|
|
|
|
# USA, while the MV URL (mvurl) is available globally, so force the MV |
|
|
|
|
|
# URL for consistent results in different countries |
|
|
|
|
|
'params': { |
|
|
|
|
|
'format': 'mv', |
|
|
|
|
|
}, |
|
|
} |
|
|
} |
|
|
_FORMATS = KuwoBaseIE._FORMATS + [ |
|
|
_FORMATS = KuwoBaseIE._FORMATS + [ |
|
|
{'format': 'mkv', 'ext': 'mkv', 'preference': 250}, |
|
|
{'format': 'mkv', 'ext': 'mkv', 'preference': 250}, |
|
@ -313,7 +324,17 @@ class KuwoMvIE(KuwoBaseIE): |
|
|
else: |
|
|
else: |
|
|
raise ExtractorError('Unable to find song or singer names') |
|
|
raise ExtractorError('Unable to find song or singer names') |
|
|
|
|
|
|
|
|
formats = self._get_formats(song_id) |
|
|
|
|
|
|
|
|
formats = self._get_formats(song_id, tolerate_ip_deny=True) |
|
|
|
|
|
|
|
|
|
|
|
mv_url = self._download_webpage( |
|
|
|
|
|
'http://www.kuwo.cn/yy/st/mvurl?rid=MUSIC_%s' % song_id, |
|
|
|
|
|
song_id, note='Download %s MV URL' % song_id) |
|
|
|
|
|
formats.append({ |
|
|
|
|
|
'url': mv_url, |
|
|
|
|
|
'format_id': 'mv', |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
self._sort_formats(formats) |
|
|
|
|
|
|
|
|
return { |
|
|
return { |
|
|
'id': song_id, |
|
|
'id': song_id, |
|
|