|
|
@ -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,6 +43,11 @@ class KuwoBaseIE(InfoExtractor):
|
|
|
|
'preference': file_format['preference'],
|
|
|
|
'preference': file_format['preference'],
|
|
|
|
'abr': file_format.get('abr'),
|
|
|
|
'abr': file_format.get('abr'),
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 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)
|
|
|
|
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',
|
|
|
|
'ext': 'mp4',
|
|
|
|
'title': '我们家MV',
|
|
|
|
'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,
|
|
|
|