projects
/
youtube-dl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
656c200
)
[ivi] sign content request only when pycryptodome is available
author
Remita Amine
<remitamine@gmail.com>
Fri, 15 Nov 2019 22:46:31 +0000
(23:46 +0100)
committer
Remita Amine
<remitamine@gmail.com>
Fri, 15 Nov 2019 22:46:31 +0000
(23:46 +0100)
youtube_dl/extractor/ivi.py
patch
|
blob
|
history
diff --git
a/youtube_dl/extractor/ivi.py
b/youtube_dl/extractor/ivi.py
index efdc3cc984fefe093fa18635c7f334ebbfd8dd55..1dcb17c9b36e5b83aaa74ad6471552433f5963ff 100644
(file)
--- a/
youtube_dl/extractor/ivi.py
+++ b/
youtube_dl/extractor/ivi.py
@@
-80,38
+80,42
@@
class IviIE(InfoExtractor):
'MP4-SHQ', 'MP4-HD720', 'MP4-HD1080')
def _real_extract(self, url):
'MP4-SHQ', 'MP4-HD720', 'MP4-HD1080')
def _real_extract(self, url):
- try:
- from Crypto.Cipher import Blowfish
- from Crypto.Hash import CMAC
- except ImportError:
- raise ExtractorError('pycrypto not found. Please install it.', expected=True)
-
video_id = self._match_id(url)
video_id = self._match_id(url)
- timestamp = self._download_json(
- self._LIGHT_URL, video_id,
- 'Downloading timestamp JSON', data=json.dumps({
- 'method': 'da.timestamp.get',
- 'params': []
- }).encode())['result']
-
data = json.dumps({
'method': 'da.content.get',
'params': [
video_id, {
data = json.dumps({
'method': 'da.content.get',
'params': [
video_id, {
- 'site': 's
353
',
+ 'site': 's
%d
',
'referrer': 'http://www.ivi.ru/watch/%s' % video_id,
'contentid': video_id
}
]
}).encode()
'referrer': 'http://www.ivi.ru/watch/%s' % video_id,
'contentid': video_id
}
]
}).encode()
- video_json = self._download_json(
- self._LIGHT_URL, video_id,
- 'Downloading video JSON', data=data, query={
+ try:
+ from Crypto.Cipher import Blowfish
+ from Crypto.Hash import CMAC
+
+ timestamp = 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(),
'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:
error = video_json.get('error')
if error:
@@
-121,6
+125,8
@@
class IviIE(InfoExtractor):
msg=error['message'], countries=self._GEO_COUNTRIES)
elif origin == 'NoRedisValidData':
raise ExtractorError('Video %s does not exist' % video_id, expected=True)
msg=error['message'], countries=self._GEO_COUNTRIES)
elif origin == 'NoRedisValidData':
raise ExtractorError('Video %s does not exist' % video_id, expected=True)
+ elif origin == 'NotAllowedError':
+ raise ExtractorError('pycryptodome not found. Please install it.', expected=True)
raise ExtractorError(
'Unable to download video %s: %s' % (video_id, error['message']),
expected=True)
raise ExtractorError(
'Unable to download video %s: %s' % (video_id, error['message']),
expected=True)