[kuwo:mv] Fix the test and extraction of georestricted MVs

This commit is contained in:
Yen Chi Hsuan 2016-03-15 02:20:37 +08:00
parent cb6e477dfe
commit 3ff8279e80

View file

@ -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 @@ def _get_formats(self, song_id):
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 @@ def _get_formats(self, song_id):
'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 @@ def _real_extract(self, url):
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,