projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge remote-tracking branch 'upstream/master' into bliptv
[youtube-dl]
/
youtube_dl
/
extractor
/
iqiyi.py
diff --git
a/youtube_dl/extractor/iqiyi.py
b/youtube_dl/extractor/iqiyi.py
index ac541695320c7d7fa5645140c5e36ed173170a12..2df1da3f00a9d9655a0c9f6a447510dcf9e2caf0 100644
(file)
--- a/
youtube_dl/extractor/iqiyi.py
+++ b/
youtube_dl/extractor/iqiyi.py
@@
-3,19
+3,13
@@
from __future__ import unicode_literals
import hashlib
import math
import hashlib
import math
-import os.path
import random
import random
-import re
import time
import uuid
import time
import uuid
-import zlib
from .common import InfoExtractor
from ..compat import compat_urllib_parse
from .common import InfoExtractor
from ..compat import compat_urllib_parse
-from ..utils import (
- ExtractorError,
- url_basename,
-)
+from ..utils import ExtractorError
class IqiyiIE(InfoExtractor):
class IqiyiIE(InfoExtractor):
@@
-39,62
+33,57
@@
class IqiyiIE(InfoExtractor):
'title': '名侦探柯南第752集',
},
'playlist': [{
'title': '名侦探柯南第752集',
},
'playlist': [{
- 'md5': '7e49376fecaffa115d951634917fe105',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part1',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part1',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
- 'md5': '41b75ba13bb7ac0e411131f92bc4f6ca',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part2',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part2',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
- 'md5': '0cee1dd0a3d46a83e71e2badeae2aab0',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part3',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part3',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
- 'md5': '4f8ad72373b0c491b582e7c196b0b1f9',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part4',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part4',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
- 'md5': 'd89ad028bcfad282918e8098e811711d',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part5',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part5',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
- 'md5': '9cb1e5c95da25dff0660c32ae50903b7',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part6',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part6',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
- 'md5': '155116e0ff1867bbc9b98df294faabc9',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part7',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part7',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}, {
- 'md5': '53f5db77622ae14fa493ed2a278a082b',
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part8',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}],
'info_dict': {
'id': 'e3f585b550a280af23c98b6cb2be19fb_part8',
'ext': 'f4v',
'title': '名侦探柯南第752集',
},
}],
+ 'params': {
+ 'skip_download': True,
+ },
}]
_FORMATS_MAP = [
}]
_FORMATS_MAP = [
@@
-106,6
+95,10
@@
class IqiyiIE(InfoExtractor):
('10', 'h1'),
]
('10', 'h1'),
]
+ @staticmethod
+ def md5_text(text):
+ return hashlib.md5(text.encode('utf-8')).hexdigest()
+
def construct_video_urls(self, data, video_id, _uuid):
def do_xor(x, y):
a = y % 3
def construct_video_urls(self, data, video_id, _uuid):
def do_xor(x, y):
a = y % 3
@@
-132,7
+125,7
@@
class IqiyiIE(InfoExtractor):
note='Download path key of segment %d for format %s' % (segment_index + 1, format_id)
)['t']
t = str(int(math.floor(int(tm) / (600.0))))
note='Download path key of segment %d for format %s' % (segment_index + 1, format_id)
)['t']
t = str(int(math.floor(int(tm) / (600.0))))
- return
hashlib.md5((t + mg + x).encode('utf8')).hexdigest(
)
+ return
self.md5_text(t + mg + x
)
video_urls_dict = {}
for format_item in data['vp']['tkl'][0]['vs']:
video_urls_dict = {}
for format_item in data['vp']['tkl'][0]['vs']:
@@
-190,20
+183,19
@@
class IqiyiIE(InfoExtractor):
def get_raw_data(self, tvid, video_id, enc_key, _uuid):
tm = str(int(time.time()))
def get_raw_data(self, tvid, video_id, enc_key, _uuid):
tm = str(int(time.time()))
+ tail = tm + tvid
param = {
'key': 'fvip',
param = {
'key': 'fvip',
- 'src':
hashlib.md5(b'youtube-dl').hexdigest(
),
+ 'src':
self.md5_text('youtube-dl'
),
'tvId': tvid,
'vid': video_id,
'vinfo': 1,
'tm': tm,
'tvId': tvid,
'vid': video_id,
'vinfo': 1,
'tm': tm,
- 'enc': hashlib.md5(
- (enc_key + tm + tvid).encode('utf8')).hexdigest(),
+ 'enc': self.md5_text(enc_key + tail),
'qyid': _uuid,
'tn': random.random(),
'um': 0,
'qyid': _uuid,
'tn': random.random(),
'um': 0,
- 'authkey': hashlib.md5(
- (tm + tvid).encode('utf8')).hexdigest()
+ 'authkey': self.md5_text(self.md5_text('') + tail),
}
api_url = 'http://cache.video.qiyi.com/vms' + '?' + \
}
api_url = 'http://cache.video.qiyi.com/vms' + '?' + \
@@
-212,7
+204,10
@@
class IqiyiIE(InfoExtractor):
return raw_data
def get_enc_key(self, swf_url, video_id):
return raw_data
def get_enc_key(self, swf_url, video_id):
- enc_key = '8e29ab5666d041c3a1ea76e06dabdffb'
+ # TODO: automatic key extraction
+ # last update at 2015-10-22 for Zombie::bite
+ # '7223c67061dbea1259d0ceb44f44b6d62288f4f80c972170de5201d2321060270e05'[2:66][0::2]
+ enc_key = '2c76de15dcb44bd28ff0927d50d31620'
return enc_key
def _real_extract(self, url):
return enc_key
def _real_extract(self, url):