|
|
|
@ -93,46 +93,57 @@ class IviIE(InfoExtractor):
|
|
|
|
|
]
|
|
|
|
|
}).encode()
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
from Crypto.Cipher import Blowfish
|
|
|
|
|
from Crypto.Hash import CMAC
|
|
|
|
|
for site in (353, 183):
|
|
|
|
|
content_data = data % site
|
|
|
|
|
if site == 353:
|
|
|
|
|
try:
|
|
|
|
|
from Cryptodome.Cipher import Blowfish
|
|
|
|
|
from Cryptodome.Hash import CMAC
|
|
|
|
|
pycryptodomex_found = True
|
|
|
|
|
except ImportError:
|
|
|
|
|
pycryptodomex_found = False
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
timestamp = self._download_json(
|
|
|
|
|
timestamp = (self._download_json(
|
|
|
|
|
self._LIGHT_URL, video_id,
|
|
|
|
|
'Downloading timestamp JSON', data=json.dumps({
|
|
|
|
|
'method': 'da.timestamp.get',
|
|
|
|
|
'params': []
|
|
|
|
|
}).encode(), fatal=False) or {}).get('result')
|
|
|
|
|
if not timestamp:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
query = {
|
|
|
|
|
'ts': timestamp,
|
|
|
|
|
'sign': CMAC.new(self._LIGHT_KEY, timestamp.encode() + content_data, Blowfish).hexdigest(),
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
query = {}
|
|
|
|
|
|
|
|
|
|
video_json = self._download_json(
|
|
|
|
|
self._LIGHT_URL, video_id,
|
|
|
|
|
'Downloading timestamp JSON', data=json.dumps({
|
|
|
|
|
'method': 'da.timestamp.get',
|
|
|
|
|
'params': []
|
|
|
|
|
}).encode())['result']
|
|
|
|
|
|
|
|
|
|
data = data % 353
|
|
|
|
|
query = {
|
|
|
|
|
'ts': timestamp,
|
|
|
|
|
'sign': CMAC.new(self._LIGHT_KEY, timestamp.encode() + data, Blowfish).hexdigest(),
|
|
|
|
|
}
|
|
|
|
|
except ImportError:
|
|
|
|
|
data = data % 183
|
|
|
|
|
query = {}
|
|
|
|
|
|
|
|
|
|
video_json = self._download_json(
|
|
|
|
|
self._LIGHT_URL, video_id,
|
|
|
|
|
'Downloading video JSON', data=data, query=query)
|
|
|
|
|
|
|
|
|
|
error = video_json.get('error')
|
|
|
|
|
if error:
|
|
|
|
|
origin = error.get('origin')
|
|
|
|
|
message = error.get('message') or error.get('user_message')
|
|
|
|
|
extractor_msg = 'Unable to download video %s'
|
|
|
|
|
if origin == 'NotAllowedForLocation':
|
|
|
|
|
self.raise_geo_restricted(message, self._GEO_COUNTRIES)
|
|
|
|
|
elif origin == 'NoRedisValidData':
|
|
|
|
|
extractor_msg = 'Video %s does not exist'
|
|
|
|
|
elif message:
|
|
|
|
|
if 'недоступен для просмотра на площадке s183' in message:
|
|
|
|
|
'Downloading video JSON', data=content_data, query=query)
|
|
|
|
|
|
|
|
|
|
error = video_json.get('error')
|
|
|
|
|
if error:
|
|
|
|
|
origin = error.get('origin')
|
|
|
|
|
message = error.get('message') or error.get('user_message')
|
|
|
|
|
extractor_msg = 'Unable to download video %s'
|
|
|
|
|
if origin == 'NotAllowedForLocation':
|
|
|
|
|
self.raise_geo_restricted(message, self._GEO_COUNTRIES)
|
|
|
|
|
elif origin == 'NoRedisValidData':
|
|
|
|
|
extractor_msg = 'Video %s does not exist'
|
|
|
|
|
elif site == 353:
|
|
|
|
|
continue
|
|
|
|
|
elif not pycryptodomex_found:
|
|
|
|
|
raise ExtractorError(
|
|
|
|
|
'pycryptodome not found. Please install it.',
|
|
|
|
|
expected=True)
|
|
|
|
|
extractor_msg += ': ' + message
|
|
|
|
|
raise ExtractorError(extractor_msg % video_id, expected=True)
|
|
|
|
|
elif message:
|
|
|
|
|
extractor_msg += ': ' + message
|
|
|
|
|
raise ExtractorError(extractor_msg % video_id, expected=True)
|
|
|
|
|
else:
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
result = video_json['result']
|
|
|
|
|
title = result['title']
|
|
|
|
|