]
}).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']