youku:support password option and fix small size video bug

This commit is contained in:
lh 2015-06-18 23:21:45 +08:00
parent 1f01898184
commit 10053e25b6

View File

@ -120,7 +120,7 @@ class Youku(VideoExtractor):
f_code_2 = 'bf7e5f01' f_code_2 = 'bf7e5f01'
number = hex(int(no,10))[2:].upper() number = hex(int(str(no),10))[2:].upper()
if len(number) == 1: if len(number) == 1:
number = '0' + number number = '0' + number
fileId = fileId0[0:8] + number + fileId0[10:] fileId = fileId0[0:8] + number + fileId0[10:]
@ -173,13 +173,20 @@ class Youku(VideoExtractor):
log.wtf('[Failed] Video not found.') log.wtf('[Failed] Video not found.')
metadata0 = meta['data'][0] metadata0 = meta['data'][0]
if 'error_code' in metadata0 and metadata0['error_code']:
if metadata0['error_code'] == -6:
log.w('[Warning] This video is password protected.')
self.password_protected = True
password = input(log.sprint('Password: ', log.YELLOW))
meta = json.loads(get_html('http://v.youku.com/player/getPlayList/VideoIDS/%s/Pf/4/ctype/12/ev/1/password/' % self.vid + password))
if not meta['data']:
log.wtf('[Failed] Video not found.')
metadata0 = meta['data'][0]
if 'error_code' in metadata0 and metadata0['error_code']: if 'error_code' in metadata0 and metadata0['error_code']:
if metadata0['error_code'] == -8: if metadata0['error_code'] == -8:
log.w('[Warning] This video can only be streamed within Mainland China!') log.w('[Warning] This video can only be streamed within Mainland China!')
log.w('Use \'-y\' to specify a proxy server for extracting stream data.\n') log.w('Use \'-y\' to specify a proxy server for extracting stream data.\n')
elif metadata0['error_code'] == -6:
log.w('[Warning] This video is password protected.')
self.password_protected = True
self.title = metadata0['title'] self.title = metadata0['title']
self.metadata = metadata0 self.metadata = metadata0
@ -227,6 +234,9 @@ class Youku(VideoExtractor):
stream_list=self.metadata['segs'][stream_id] stream_list=self.metadata['segs'][stream_id]
for nu in range(0,len(stream_list)): for nu in range(0,len(stream_list)):
k = stream_list[nu]['k'] k = stream_list[nu]['k']
if k == -1:
log.e('Error')
exit()
no = stream_list[nu]['no'] no = stream_list[nu]['no']
fileId,ep = self.__class__.generate_ep(no,fileId0,sid,token) fileId,ep = self.__class__.generate_ep(no,fileId0,sid,token)
#pdb.set_trace() #pdb.set_trace()
@ -237,12 +247,8 @@ class Youku(VideoExtractor):
m3u8+='&ctype=12&ev=1&token='+ token m3u8+='&ctype=12&ev=1&token='+ token
m3u8+='&oip='+ str(self.ip) m3u8+='&oip='+ str(self.ip)
m3u8+='&ep='+ ep+'\r\n' m3u8+='&ep='+ ep+'\r\n'
if not kwargs['info_only']:
# if self.password_protected:
# password = input(log.sprint('Password: ', log.YELLOW))
# m3u8_url += '&password={}'.format(password)
#pdb.set_trace() if not kwargs['info_only']:
self.streams[stream_id]['src'] = self.__class__.parse_m3u8(m3u8) self.streams[stream_id]['src'] = self.__class__.parse_m3u8(m3u8)
if not self.streams[stream_id]['src'] and self.password_protected: if not self.streams[stream_id]['src'] and self.password_protected:
log.e('[Failed] Wrong password.') log.e('[Failed] Wrong password.')