From 51661d86005ffbdd4debd051cd9683cf5f5c2fe9 Mon Sep 17 00:00:00 2001 From: dongmao zhang Date: Thu, 9 Aug 2012 02:04:02 +0800 Subject: [PATCH] add www.youku.com support --- youtube-dl | Bin 40663 -> 42041 bytes youtube_dl/InfoExtractors.py | 132 +++++++++++++++++++++++++++++++++++ youtube_dl/__init__.py | 1 + 3 files changed, 133 insertions(+) diff --git a/youtube-dl b/youtube-dl index f2268af227b0eee8548aa6d106861cc508879931..635b1356e22be41d6c0e359104f602a51b3f284d 100755 GIT binary patch delta 27693 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 TF#j|g=I^@u+j0Dye|G-`3BV>f delta 26283 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

F_HpTa$tXP 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[A-Za-z0-9]+)\.html' + IE_NAME = u'Youku' + + def __init__(self, downloader=None): + InfoExtractor.__init__(self, downloader) + + def report_download_webpage(self, file_id): + """Report webpage download.""" + self._downloader.to_screen(u'[Youku] %s: Downloading webpage' % file_id) + + def report_extraction(self, file_id): + """Report information extraction.""" + self._downloader.to_screen(u'[Youku] %s: Extracting information' % file_id) + + def _gen_sid(self): + nowTime = int(time.time() * 1000) + random1 = random.randint(1000,1998) + random2 = random.randint(1000,9999) + + return "%d%d%d" %(nowTime,random1,random2) + + def _get_file_ID_mix_string(self, seed): + mixed = [] + source = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890") + seed = float(seed) + for i in range(len(source)): + seed = (seed * 211 + 30031 ) % 65536 + index = math.floor(seed / 65536 * len(source) ) + mixed.append(source[int(index)]) + source.remove(source[int(index)]) + #return ''.join(mixed) + return mixed + + + def _get_file_id(self, fileId, seed): + mixed = self._get_file_ID_mix_string(seed) + ids = fileId.split('*') + realId = [] + for ch in ids: + if ch is not '': + realId.append(mixed[int(ch)]) + return ''.join(realId) + + def _gen_key(self, key1, key2): + pass + + + + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + if mobj is None: + self._downloader.trouble(u'ERROR: invalid URL: %s' % url) + return + video_id = mobj.group('ID') + + info_url = 'http://v.youku.com/player/getPlayList/VideoIDS/' + video_id + + request = urllib2.Request(info_url, None, std_headers) + try: + self.report_download_webpage(video_id) + jsondata = urllib2.urlopen(request).read() + except (urllib2.URLError, httplib.HTTPException, socket.error) as err: + self._downloader.trouble(u'ERROR: Unable to retrieve video webpage: %s' % str(err)) + return + + self.report_extraction(video_id) + try: + config = json.loads(jsondata) + + video_title = config['data'][0]['title'] + seed = config['data'][0]['seed'] + + format = self._downloader.params.get('format', None) + supported_format = config['data'][0]['streamfileids'].keys() + + if format is None or format == 'best': + if 'hd2' in supported_format: + format = 'hd2' + else: + format = 'flv' + ext = u'flv' + elif format == 'worst': + format = 'mp4' + ext = u'mp4' + else: + format = 'flv' + ext = u'flv' + + + fileid = config['data'][0]['streamfileids'][format] + seg_number = len(config['data'][0]['segs'][format]) + + keys=[] + for i in xrange(seg_number): + keys.append(config['data'][0]['segs'][format][i]['k']) + + #TODO check error + #youku only could be viewed from mainland china + except: + self._downloader.trouble(u'ERROR: unable to extract info section') + return + + files_info=[] + sid = self._gen_sid() + fileid = self._get_file_id(fileid, seed) + + #column 8,9 of fileid represent the segment number + #fileid[7:9] should be changed + for index, key in enumerate(keys): + + temp_fileid = '%s%02X%s' % (fileid[0:8], index, fileid[10:]) + download_url = 'http://f.youku.com/player/getFlvPath/sid/%s_%02X/st/flv/fileid/%s?k=%s' % (sid, index, temp_fileid, key) + print download_url + info = { + 'id': '%s_part%02d' % (video_id, index), + 'url': download_url, + 'uploader': None, + 'title': video_title, + 'ext': ext, + 'format': u'NA' + } + files_info.append(info) + + return files_info diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 86951840d..84b972d51 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -351,6 +351,7 @@ def gen_extractors(): MixcloudIE(), StanfordOpenClassroomIE(), MTVIE(), + YoukuIE(), GenericIE() ]