mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[youku] Modernize somewhat
This commit is contained in:
		| @@ -1,5 +1,7 @@ | ||||
| # coding: utf-8 | ||||
|  | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import json | ||||
| import math | ||||
| import random | ||||
| @@ -13,18 +15,25 @@ from ..utils import ( | ||||
|  | ||||
|  | ||||
| class YoukuIE(InfoExtractor): | ||||
|     _VALID_URL =  r'(?:(?:http://)?(?:v|player)\.youku\.com/(?:v_show/id_|player\.php/sid/)|youku:)(?P<ID>[A-Za-z0-9]+)(?:\.html|/v\.swf|)' | ||||
|     _TEST =   { | ||||
|         u"url": u"http://v.youku.com/v_show/id_XNDgyMDQ2NTQw.html", | ||||
|         u"file": u"XNDgyMDQ2NTQw_part00.flv", | ||||
|         u"md5": u"ffe3f2e435663dc2d1eea34faeff5b5b", | ||||
|         u"params": {u"test": False}, | ||||
|         u"info_dict": { | ||||
|             u"title": u"youtube-dl test video \"'/\\ä↭𝕐" | ||||
|     _VALID_URL = r'''(?x) | ||||
|         (?: | ||||
|             http://(?:v|player)\.youku\.com/(?:v_show/id_|player\.php/sid/)| | ||||
|             youku:) | ||||
|         (?P<id>[A-Za-z0-9]+)(?:\.html|/v\.swf|) | ||||
|     ''' | ||||
|     _TEST = { | ||||
|         'url': 'http://v.youku.com/v_show/id_XNDgyMDQ2NTQw.html', | ||||
|         'md5': 'ffe3f2e435663dc2d1eea34faeff5b5b', | ||||
|         'params': { | ||||
|             'test': False | ||||
|         }, | ||||
|         'info_dict': { | ||||
|             'id': 'XNDgyMDQ2NTQw_part00', | ||||
|             'ext': 'flv', | ||||
|             'title': 'youtube-dl test video "\'/\\ä↭𝕐' | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     def _gen_sid(self): | ||||
|         nowTime = int(time.time() * 1000) | ||||
|         random1 = random.randint(1000,1998) | ||||
| @@ -55,49 +64,42 @@ class YoukuIE(InfoExtractor): | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         if mobj is None: | ||||
|             raise ExtractorError(u'Invalid URL: %s' % url) | ||||
|         video_id = mobj.group('ID') | ||||
|         video_id = mobj.group('id') | ||||
|  | ||||
|         info_url = 'http://v.youku.com/player/getPlayList/VideoIDS/' + video_id | ||||
|  | ||||
|         jsondata = self._download_webpage(info_url, video_id) | ||||
|         config = self._download_json(info_url, video_id) | ||||
|  | ||||
|         self.report_extraction(video_id) | ||||
|         try: | ||||
|             config = json.loads(jsondata) | ||||
|             error_code = config['data'][0].get('error_code') | ||||
|             if error_code: | ||||
|                 # -8 means blocked outside China. | ||||
|                 error = config['data'][0].get('error')  # Chinese and English, separated by newline. | ||||
|                 raise ExtractorError(error or u'Server reported error %i' % error_code, | ||||
|                     expected=True) | ||||
|         error_code = config['data'][0].get('error_code') | ||||
|         if error_code: | ||||
|             # -8 means blocked outside China. | ||||
|             error = config['data'][0].get('error')  # Chinese and English, separated by newline. | ||||
|             raise ExtractorError(error or 'Server reported error %i' % error_code, | ||||
|                 expected=True) | ||||
|  | ||||
|             video_title =  config['data'][0]['title'] | ||||
|             seed = config['data'][0]['seed'] | ||||
|         video_title = config['data'][0]['title'] | ||||
|         seed = config['data'][0]['seed'] | ||||
|  | ||||
|             format = self._downloader.params.get('format', None) | ||||
|             supported_format = list(config['data'][0]['streamfileids'].keys()) | ||||
|         format = self._downloader.params.get('format', None) | ||||
|         supported_format = list(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' | ||||
|         # TODO proper format selection | ||||
|         if format is None or format == 'best': | ||||
|             if 'hd2' in supported_format: | ||||
|                 format = 'hd2' | ||||
|             else: | ||||
|                 format = 'flv' | ||||
|                 ext = u'flv' | ||||
|             ext = 'flv' | ||||
|         elif format == 'worst': | ||||
|             format = 'mp4' | ||||
|             ext = 'mp4' | ||||
|         else: | ||||
|             format = 'flv' | ||||
|             ext = 'flv' | ||||
|  | ||||
|  | ||||
|             fileid = config['data'][0]['streamfileids'][format] | ||||
|             keys = [s['k'] for s in config['data'][0]['segs'][format]] | ||||
|             # segs is usually a dictionary, but an empty *list* if an error occured. | ||||
|         except (UnicodeDecodeError, ValueError, KeyError): | ||||
|             raise ExtractorError(u'Unable to extract info section') | ||||
|         fileid = config['data'][0]['streamfileids'][format] | ||||
|         keys = [s['k'] for s in config['data'][0]['segs'][format]] | ||||
|         # segs is usually a dictionary, but an empty *list* if an error occured. | ||||
|  | ||||
|         files_info=[] | ||||
|         sid = self._gen_sid() | ||||
| @@ -106,9 +108,8 @@ class YoukuIE(InfoExtractor): | ||||
|         #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) | ||||
|             download_url = 'http://k.youku.com/player/getFlvPath/sid/%s_%02X/st/flv/fileid/%s?k=%s' % (sid, index, temp_fileid, key) | ||||
|  | ||||
|             info = { | ||||
|                 'id': '%s_part%02d' % (video_id, index), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister