[ivi] fallback to old extraction method for unknown error codes

master
Remita Amine 5 years ago
parent f9c4a45210
commit 76d9eca43d

@ -93,46 +93,57 @@ class IviIE(InfoExtractor):
] ]
}).encode() }).encode()
try: for site in (353, 183):
from Crypto.Cipher import Blowfish content_data = data % site
from Crypto.Hash import CMAC 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, self._LIGHT_URL, video_id,
'Downloading timestamp JSON', data=json.dumps({ 'Downloading video JSON', data=content_data, query=query)
'method': 'da.timestamp.get',
'params': [] error = video_json.get('error')
}).encode())['result'] if error:
origin = error.get('origin')
data = data % 353 message = error.get('message') or error.get('user_message')
query = { extractor_msg = 'Unable to download video %s'
'ts': timestamp, if origin == 'NotAllowedForLocation':
'sign': CMAC.new(self._LIGHT_KEY, timestamp.encode() + data, Blowfish).hexdigest(), self.raise_geo_restricted(message, self._GEO_COUNTRIES)
} elif origin == 'NoRedisValidData':
except ImportError: extractor_msg = 'Video %s does not exist'
data = data % 183 elif site == 353:
query = {} continue
elif not pycryptodomex_found:
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:
raise ExtractorError( raise ExtractorError(
'pycryptodome not found. Please install it.', 'pycryptodome not found. Please install it.',
expected=True) expected=True)
extractor_msg += ': ' + message elif message:
raise ExtractorError(extractor_msg % video_id, expected=True) extractor_msg += ': ' + message
raise ExtractorError(extractor_msg % video_id, expected=True)
else:
break
result = video_json['result'] result = video_json['result']
title = result['title'] title = result['title']

Loading…
Cancel
Save