X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fyouku.py;h=3a3432be85464ecdee517620b5e0cf9f3534d0d8;hb=9f0ee2a3883ec6f6fdccba90085cb925aaa2f617;hp=5110efcb43b37e2cd4f98bb41e9e257a1d097f93;hpb=1faa66f005aaefe1493d150f145523a0ea34b5c2;p=youtube-dl diff --git a/youtube_dl/extractor/youku.py b/youtube_dl/extractor/youku.py index 5110efcb4..3a3432be8 100644 --- a/youtube_dl/extractor/youku.py +++ b/youtube_dl/extractor/youku.py @@ -2,7 +2,6 @@ from __future__ import unicode_literals import base64 -import json from .common import InfoExtractor from ..compat import ( @@ -26,8 +25,8 @@ class YoukuIE(InfoExtractor): ''' _TESTS = [{ + # MD5 is unstable 'url': 'http://v.youku.com/v_show/id_XMTc1ODE5Njcy.html', - 'md5': '5f3af4192eabacc4501508d54a8cabd7', 'info_dict': { 'id': 'XMTc1ODE5Njcy_part1', 'title': '★Smile﹗♡ Git Fresh -Booty Music舞蹈.', @@ -43,6 +42,7 @@ class YoukuIE(InfoExtractor): 'title': '武媚娘传奇 85', }, 'playlist_count': 11, + 'skip': 'Available in China only', }, { 'url': 'http://v.youku.com/v_show/id_XMTI1OTczNDM5Mg==.html', 'info_dict': { @@ -50,7 +50,6 @@ class YoukuIE(InfoExtractor): 'title': '花千骨 04', }, 'playlist_count': 13, - 'skip': 'Available in China only', }, { 'url': 'http://v.youku.com/v_show/id_XNjA1NzA2Njgw.html', 'note': 'Video protected with password', @@ -88,10 +87,6 @@ class YoukuIE(InfoExtractor): # get oip oip = data['security']['ip'] - # get fileid - string_ls = list( - 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890') - fileid_dict = {} for stream in data['stream']: format = stream.get('stream_type') @@ -122,13 +117,11 @@ class YoukuIE(InfoExtractor): format = stream.get('stream_type') video_urls = [] for dt in stream['segs']: - #n = str(int(dt['size'])) n = str(stream['segs'].index(dt)) param = { 'K': dt['key'], 'hd': self.get_hd(format), 'myp': 0, - #'ts': dt['total_milliseconds_video'], 'ypp': 0, 'ctype': 12, 'ev': 1, @@ -139,7 +132,7 @@ class YoukuIE(InfoExtractor): video_url = \ 'http://k.youku.com/player/getFlvPath/' + \ 'sid/' + sid + \ - '_00'+ \ + '_00' + \ '/st/' + self.parse_ext_l(format) + \ '/fileid/' + get_fileid(format, n) + '?' + \ compat_urllib_parse.urlencode(param) @@ -150,30 +143,31 @@ class YoukuIE(InfoExtractor): def get_hd(self, fm): hd_id_dict = { - 'flv': '0', - 'mp4': '1', - 'hd2': '2', - 'hd3': '3', '3gp': '0', '3gphd': '1', + 'flv': '0', 'flvhd': '0', + 'mp4': '1', 'mp4hd': '1', - 'mp4hd2': '1' + 'mp4hd2': '1', + 'mp4hd3': '1', + 'hd2': '2', + 'hd3': '3', } return hd_id_dict[fm] def parse_ext_l(self, fm): ext_dict = { + '3gp': 'flv', + '3gphd': 'mp4', 'flv': 'flv', + 'flvhd': 'flv', 'mp4': 'mp4', 'mp4hd': 'mp4', 'mp4hd2': 'flv', 'mp4hd3': 'flv', 'hd2': 'flv', 'hd3': 'flv', - '3gp': 'flv', - '3gphd': 'mp4', - 'flvhd': 'flv' } return ext_dict[fm] @@ -181,14 +175,14 @@ class YoukuIE(InfoExtractor): _dict = { '3gp': 'h6', '3gphd': 'h5', - 'flvhd': 'h4', 'flv': 'h4', + 'flvhd': 'h4', 'mp4': 'h3', - 'hd2': 'h2', - 'hd3': 'h1', 'mp4hd': 'h3', + 'mp4hd2': 'h4', 'mp4hd3': 'h4', - 'mp4hd2': 'h4' + 'hd2': 'h2', + 'hd3': 'h1', } return _dict[fm] @@ -196,24 +190,20 @@ class YoukuIE(InfoExtractor): video_id = self._match_id(url) def retrieve_data(req_url, note): - - headers = { - 'Referer': req_url, - } - self._set_cookie('youku.com','xreferrer','http://www.youku.com') - req = sanitized_Request(req_url,headers=headers) + 'Referer': req_url, + } + self._set_cookie('youku.com', 'xreferrer', 'http://www.youku.com') + req = sanitized_Request(req_url, headers=headers) cn_verification_proxy = self._downloader.params.get('cn_verification_proxy') if cn_verification_proxy: req.add_header('Ytdl-request-proxy', cn_verification_proxy) raw_data = self._download_json(req, video_id, note=note) - js = json.dumps(raw_data) return raw_data['data'] - video_password = self._downloader.params.get('videopassword', None) # request basic data @@ -221,9 +211,7 @@ class YoukuIE(InfoExtractor): if video_password: basic_data_url += '&pwd=%s' % video_password - data = retrieve_data( - basic_data_url, - 'Downloading JSON metadata 1') + data = retrieve_data(basic_data_url, 'Downloading JSON metadata') error = data.get('error') if error: @@ -233,14 +221,13 @@ class YoukuIE(InfoExtractor): 'Youku said: Sorry, this video is available in China only', expected=True) else: msg = 'Youku server reported error %i' % error.get('code') - if error is not None: + if error_note is not None: msg += ': ' + error_note raise ExtractorError(msg) - #get video title + # get video title title = data['video']['title'] - # generate video_urls_dict video_urls_dict = self.construct_video_urls(data)