|
@ -7,6 +7,7 @@ import re |
|
|
|
|
|
|
|
|
from .common import InfoExtractor |
|
|
from .common import InfoExtractor |
|
|
from ..compat import ( |
|
|
from ..compat import ( |
|
|
|
|
|
compat_b64decode, |
|
|
compat_chr, |
|
|
compat_chr, |
|
|
compat_ord, |
|
|
compat_ord, |
|
|
compat_str, |
|
|
compat_str, |
|
@ -79,7 +80,7 @@ class MixcloudIE(InfoExtractor): |
|
|
|
|
|
|
|
|
if encrypted_play_info is not None: |
|
|
if encrypted_play_info is not None: |
|
|
# Decode |
|
|
# Decode |
|
|
encrypted_play_info = base64.b64decode(encrypted_play_info) |
|
|
|
|
|
|
|
|
encrypted_play_info = compat_b64decode(encrypted_play_info) |
|
|
else: |
|
|
else: |
|
|
# New path |
|
|
# New path |
|
|
full_info_json = self._parse_json(self._html_search_regex( |
|
|
full_info_json = self._parse_json(self._html_search_regex( |
|
@ -109,7 +110,7 @@ class MixcloudIE(InfoExtractor): |
|
|
kpa_target = encrypted_play_info |
|
|
kpa_target = encrypted_play_info |
|
|
else: |
|
|
else: |
|
|
kps = ['https://', 'http://'] |
|
|
kps = ['https://', 'http://'] |
|
|
kpa_target = base64.b64decode(info_json['streamInfo']['url']) |
|
|
|
|
|
|
|
|
kpa_target = compat_b64decode(info_json['streamInfo']['url']) |
|
|
for kp in kps: |
|
|
for kp in kps: |
|
|
partial_key = self._decrypt_xor_cipher(kpa_target, kp) |
|
|
partial_key = self._decrypt_xor_cipher(kpa_target, kp) |
|
|
for quote in ["'", '"']: |
|
|
for quote in ["'", '"']: |
|
@ -165,7 +166,7 @@ class MixcloudIE(InfoExtractor): |
|
|
format_url = stream_info.get(url_key) |
|
|
format_url = stream_info.get(url_key) |
|
|
if not format_url: |
|
|
if not format_url: |
|
|
continue |
|
|
continue |
|
|
decrypted = self._decrypt_xor_cipher(key, base64.b64decode(format_url)) |
|
|
|
|
|
|
|
|
decrypted = self._decrypt_xor_cipher(key, compat_b64decode(format_url)) |
|
|
if not decrypted: |
|
|
if not decrypted: |
|
|
continue |
|
|
continue |
|
|
if url_key == 'hlsUrl': |
|
|
if url_key == 'hlsUrl': |
|
|