Reduce code duplication

This commit is contained in:
Tatsuyuki Ishi 2017-09-21 20:56:23 +09:00
parent a26f2947dd
commit 79ec7fb114

View File

@ -61,6 +61,13 @@ class MixcloudIE(InfoExtractor):
compat_chr(compat_ord(ch) ^ compat_ord(k)) compat_chr(compat_ord(ch) ^ compat_ord(k))
for ch, k in compat_zip(ciphertext, itertools.cycle(key))]) for ch, k in compat_zip(ciphertext, itertools.cycle(key))])
@staticmethod
def _decrypt_and_extend(stream_info, url_key, getter, key, formats):
maybe_url = stream_info.get(url_key)
if maybe_url is not None:
decrypted = MixcloudIE._decrypt_xor_cipher(key, base64.b64decode(maybe_url))
formats.extend(getter(decrypted))
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) mobj = re.match(self._VALID_URL, url)
uploader = mobj.group(1) uploader = mobj.group(1)
@ -154,20 +161,15 @@ class MixcloudIE(InfoExtractor):
view_count = try_get(info_json, lambda x: x['plays']) view_count = try_get(info_json, lambda x: x['plays'])
stream_info = info_json['streamInfo'] stream_info = info_json['streamInfo']
formats = [{ formats = []
self._decrypt_and_extend(stream_info, 'url', lambda x: [{
'format_id': 'normal', 'format_id': 'normal',
'url': self._decrypt_xor_cipher(key, base64.b64decode(stream_info['url'])) 'url': x
}] }], key, formats)
self._decrypt_and_extend(stream_info, 'hlsUrl', lambda x: self._extract_m3u8_formats(x, title), key,
hls_encrypted = stream_info.get('hlsUrl') formats)
if hls_encrypted is not None: self._decrypt_and_extend(stream_info, 'dashUrl', lambda x: self._extract_mpd_formats(x, title), key,
hls_url = self._decrypt_xor_cipher(key, base64.b64decode(hls_encrypted)) formats)
formats.extend(self._extract_m3u8_formats(hls_url, title))
dash_encrypted = stream_info.get('dashUrl')
if dash_encrypted is not None:
dash_url = self._decrypt_xor_cipher(key, base64.b64decode(dash_encrypted))
formats.extend(self._extract_mpd_formats(dash_url, title))
return { return {
'id': track_id, 'id': track_id,