|
@@ -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']
|