From b115b1f392d357ea4699391b8618569e324a800e Mon Sep 17 00:00:00 2001 From: "U-TQPN6VIPCMWKPWG\\Administrator" <5linhua5@gmail.com> Date: Wed, 13 Jan 2016 14:45:27 +0800 Subject: [PATCH 0001/1225] [youku] fix extractor_proxy option --- src/you_get/extractors/youku.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/you_get/extractors/youku.py b/src/you_get/extractors/youku.py index 8202dd1dbf..38ceeb0c4a 100644 --- a/src/you_get/extractors/youku.py +++ b/src/you_get/extractors/youku.py @@ -129,7 +129,15 @@ def prepare(self, **kwargs): ssl_context = request.HTTPSHandler( context=ssl.SSLContext(ssl.PROTOCOL_TLSv1)) cookie_handler = request.HTTPCookieProcessor() - opener = request.build_opener(ssl_context, cookie_handler) + if 'extractor_proxy' in kwargs and kwargs['extractor_proxy']: + proxy = parse_host(kwargs['extractor_proxy']) + proxy_handler = request.ProxyHandler({ + 'http': '%s:%s' % proxy, + 'https': '%s:%s' % proxy, + }) + else: + proxy_handler = request.ProxyHandler({}) + opener = request.build_opener(ssl_context, cookie_handler, proxy_handler) opener.addheaders = [('Cookie','__ysuid={}'.format(time.time()))] request.install_opener(opener) @@ -267,6 +275,7 @@ def extract(self, **kwargs): fileid = fileid, q = q ) + # unset_proxy() also strips cookies,because k.youku.com doesn't need cookies('r') for now ksegs += [i['server'] for i in json.loads(get_content(u))] except error.HTTPError as e: # Use fallback stream data in case of HTTP 404 From 56f11ab79959eed5f63d4cd752326b4d5d152ec4 Mon Sep 17 00:00:00 2001 From: xyuanmu Date: Wed, 20 Jan 2016 11:29:15 +0800 Subject: [PATCH 0002/1225] Update iqiyi key --- src/you_get/extractors/iqiyi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index af8e0df0e7..2700627d6b 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -45,7 +45,7 @@ ''' def mix(tvid): - salt = 'd7184ccc20a84a9d8be798087386b6b8' + salt = '6ab6d0280511493ba85594779759d4ed' tm = str(randint(2000,4000)) sc = hashlib.new('md5', bytes(salt + tm + tvid, 'utf-8')).hexdigest() return tm, sc, 'eknas' From 511afb386202bd5804aa9f8dfb1cc043d3d8832d Mon Sep 17 00:00:00 2001 From: Mort Yao Date: Fri, 22 Jan 2016 04:35:40 +0100 Subject: [PATCH 0003/1225] [vimeo] fix #879 --- src/you_get/extractors/vimeo.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/you_get/extractors/vimeo.py b/src/you_get/extractors/vimeo.py index acb0e0df57..27c05b48f1 100644 --- a/src/you_get/extractors/vimeo.py +++ b/src/you_get/extractors/vimeo.py @@ -59,6 +59,9 @@ def vimeo_download(url, output_dir='.', merge=True, info_only=False, **kwargs): vimeo_download_by_channel(url, output_dir, merge, info_only) else: id = r1(r'https?://[\w.]*vimeo.com[/\w]*/(\d+)', url) + if id is None: + video_page = get_content(url, headers=fake_headers) + id = r1(r'"clip_id":(\d+)', video_page) assert id vimeo_download_by_id(id, None, output_dir=output_dir, merge=merge, info_only=info_only, **kwargs) From 1f2c0bde94f9b78907952c59453694785153a736 Mon Sep 17 00:00:00 2001 From: Zhang Ning Date: Fri, 22 Jan 2016 17:58:35 +0800 Subject: [PATCH 0004/1225] Revert "fix zhanqitv" This reverts commit eaab0ce3ed3054db0a12bad5e8511d5e7791f5c8. Signed-off-by: Zhang Ning --- src/you_get/extractors/zhanqi.py | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/you_get/extractors/zhanqi.py b/src/you_get/extractors/zhanqi.py index 7d6b75b67c..a648bc4af9 100644 --- a/src/you_get/extractors/zhanqi.py +++ b/src/you_get/extractors/zhanqi.py @@ -4,10 +4,6 @@ from ..common import * import re -import base64 -import json -import time -import hashlib def zhanqi_download(url, output_dir = '.', merge = True, info_only = False, **kwargs): html = get_content(url) @@ -24,28 +20,12 @@ def zhanqi_download(url, output_dir = '.', merge = True, info_only = False, **kw rtmp_base = "http://wshdl.load.cdn.zhanqi.tv/zqlive" vod_base = "http://dlvod.cdn.zhanqi.tv" rtmp_real_base = "rtmp://dlrtmp.cdn.zhanqi.tv/zqlive/" - room_info = "http://www.zhanqi.tv/api/static/live.roomid/" - KEY_MASK = "#{&..?!(" - ak2_pattern = r'ak2":"\d-([^|]+)' if video_type == "LIVE": rtmp_id = match1(html, rtmp_id_patt).replace('\\/','/') #request_url = rtmp_base+'/'+rtmp_id+'.flv?get_url=1' #real_url = get_html(request_url) - html2 = get_content(room_info + rtmp_id.split("_")[0] + ".json") - json_data = json.loads(html2) - cdns = json_data["data"]["flashvars"]["cdns"] - cdns = base64.b64decode(cdns).decode("utf-8") - cdn = match1(cdns, ak2_pattern) - cdn = base64.b64decode(cdn).decode("utf-8") - key = '' - i = 0 - while(i < len(cdn)): - key = key + chr(ord(cdn[i]) ^ ord(KEY_MASK[i % 8])) - i = i + 1 - time_hex = hex(int(time.time()))[2:] - key = hashlib.md5(bytes(key + "/zqlive/" + rtmp_id + time_hex, "utf-8")).hexdigest() - real_url = rtmp_real_base + '/' + rtmp_id + "?k=" + key + "&t=" + time_hex + real_url = rtmp_real_base + '/' + rtmp_id print_info(site_info, title, 'flv', float('inf')) if not info_only: download_rtmp_url(real_url, title, 'flv', {}, output_dir, merge = merge) From 75d8367ade90814a0da3414df5a80c42a2803237 Mon Sep 17 00:00:00 2001 From: Zhang Ning Date: Fri, 22 Jan 2016 17:59:09 +0800 Subject: [PATCH 0005/1225] Revert "[ZhanQi]temporary fix using RTMP url" This reverts commit 953c2547bcd60204895974f85ba28a5898443ee6. Signed-off-by: Zhang Ning --- src/you_get/extractors/zhanqi.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/you_get/extractors/zhanqi.py b/src/you_get/extractors/zhanqi.py index a648bc4af9..f450f9549e 100644 --- a/src/you_get/extractors/zhanqi.py +++ b/src/you_get/extractors/zhanqi.py @@ -19,17 +19,15 @@ def zhanqi_download(url, output_dir = '.', merge = True, info_only = False, **kw title = unescape_html(title) rtmp_base = "http://wshdl.load.cdn.zhanqi.tv/zqlive" vod_base = "http://dlvod.cdn.zhanqi.tv" - rtmp_real_base = "rtmp://dlrtmp.cdn.zhanqi.tv/zqlive/" if video_type == "LIVE": rtmp_id = match1(html, rtmp_id_patt).replace('\\/','/') - #request_url = rtmp_base+'/'+rtmp_id+'.flv?get_url=1' - #real_url = get_html(request_url) - real_url = rtmp_real_base + '/' + rtmp_id + request_url = rtmp_base+'/'+rtmp_id+'.flv?get_url=1' + real_url = get_html(request_url) print_info(site_info, title, 'flv', float('inf')) if not info_only: - download_rtmp_url(real_url, title, 'flv', {}, output_dir, merge = merge) - #download_urls([real_url], title, 'flv', None, output_dir, merge = merge) + #download_rtmp_url(real_url, title, 'flv', {}, output_dir, merge = merge) + download_urls([real_url], title, 'flv', None, output_dir, merge = merge) elif video_type == "VOD": vod_m3u8_request = vod_base + match1(html, vod_m3u8_id_patt).replace('\\/','/') vod_m3u8 = get_html(vod_m3u8_request) @@ -49,7 +47,6 @@ def zhanqi_download(url, output_dir = '.', merge = True, info_only = False, **kw download_urls(real_url, title, type_ or 'ts', size, output_dir, merge = merge) else: NotImplementedError('Unknown_video_type') - site_info = "zhanqi.tv" download = zhanqi_download download_playlist = playlist_not_supported('zhanqi') From 46f8bc18ea5b4c59c6844d8cab343176fea98e83 Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Sat, 23 Jan 2016 11:38:11 +0800 Subject: [PATCH 0006/1225] [qq] support for embedded video URLs e.g. http://v.qq.com/iframe/player.html?vid=q01536xb5rb&tiny=0&auto=0 --- src/you_get/extractors/qq.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/you_get/extractors/qq.py b/src/you_get/extractors/qq.py index b1d8eb0fa3..01d4311f0b 100644 --- a/src/you_get/extractors/qq.py +++ b/src/you_get/extractors/qq.py @@ -16,9 +16,14 @@ def qq_download_by_vid(vid, title, output_dir='.', merge=True, info_only=False): download_urls([url], title, ext, size, output_dir=output_dir, merge=merge) def qq_download(url, output_dir='.', merge=True, info_only=False, **kwargs): - content = get_html(url) - vid = match1(content, r'vid\s*:\s*"\s*([^"]+)"') - title = match1(content, r'title\s*:\s*"\s*([^"]+)"') + if 'iframe/player.html' in url: + vid = match1(url, r'\bvid=(\w+)') + # for embedded URLs; don't know what the title is + title = vid + else: + content = get_html(url) + vid = match1(content, r'vid\s*:\s*"\s*([^"]+)"') + title = match1(content, r'title\s*:\s*"\s*([^"]+)"') qq_download_by_vid(vid, title, output_dir, merge, info_only) From bd2179ed7689916d6c1ae67d8ea08afc35224d20 Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Sat, 23 Jan 2016 11:47:08 +0800 Subject: [PATCH 0007/1225] [qq] fix title for some videos e.g. http://v.qq.com/cover/p/ps6mnfqyrfo7es3.html?vid=q0181hpdvo5 hope this won't break others, or we should try to recognize the URL pattern (maybe apply to only URLs with "/cover/")? --- src/you_get/extractors/qq.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/you_get/extractors/qq.py b/src/you_get/extractors/qq.py index b1d8eb0fa3..eb188f9876 100644 --- a/src/you_get/extractors/qq.py +++ b/src/you_get/extractors/qq.py @@ -19,6 +19,9 @@ def qq_download(url, output_dir='.', merge=True, info_only=False, **kwargs): content = get_html(url) vid = match1(content, r'vid\s*:\s*"\s*([^"]+)"') title = match1(content, r'title\s*:\s*"\s*([^"]+)"') + # try to get the right title for URLs like this: + # http://v.qq.com/cover/p/ps6mnfqyrfo7es3.html?vid=q0181hpdvo5 + title = matchall(content, [r'title\s*:\s*"\s*([^"]+)"'])[-1] qq_download_by_vid(vid, title, output_dir, merge, info_only) From 28d04b0ad41a529466b0a77066e52053641f3caf Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Sat, 23 Jan 2016 13:06:23 +0800 Subject: [PATCH 0008/1225] [bar] dynamically calculate bar size or it'll may be too short or too long as 'total_pieces' changes old one has problems with http://www.letv.com/ptv/vplay/1709438.html --- src/you_get/common.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/you_get/common.py b/src/you_get/common.py index 7e6dced040..ab51bb6c9e 100755 --- a/src/you_get/common.py +++ b/src/you_get/common.py @@ -540,8 +540,8 @@ def url_save_chunked(url, filepath, bar, refer = None, is_part = False, faker = os.rename(temp_filepath, filepath) class SimpleProgressBar: - bar_size = term.get_terminal_size()[1] - 42 - bar = '{0:>5}% ({1:>5}/{2:<5}MB) ├{3:─<' + str(bar_size) + '}┤[{4}/{5}] {6}' + # minus the size of all statically known size in self.bar + bar_size = term.get_terminal_size()[1] - 38 def __init__(self, total_size, total_pieces = 1): self.displayed = False @@ -552,6 +552,10 @@ def __init__(self, total_size, total_pieces = 1): self.speed = '' self.last_updated = time.time() + total_pieces_len = len(str(total_pieces)) + self.bar = '{0:>5}%% ({1:>5}/{2:<5}MB) ├{3:─<%s}┤[{4:>%s}/{5:>%s}] {6}' % ( + self.bar_size - 2*total_pieces_len, total_pieces_len, total_pieces_len) + def update(self): self.displayed = True bar_size = self.bar_size From af588b2f9f63cc6be1bc41c12a677b80dede9e69 Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Sat, 23 Jan 2016 13:07:18 +0800 Subject: [PATCH 0009/1225] [bar] update bar display at the beginning or it may not show up itself promptly, leaving the user wondering why it doesn't start. I met this problem with http://www.letv.com/ptv/vplay/1709438.html, which downloads really fast, but I have to wait a few seconds before the bar shows up. --- src/you_get/common.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/you_get/common.py b/src/you_get/common.py index ab51bb6c9e..ebdc6f429d 100755 --- a/src/you_get/common.py +++ b/src/you_get/common.py @@ -691,11 +691,13 @@ def download_urls(urls, title, ext, total_size, output_dir='.', refer=None, merg if len(urls) == 1: url = urls[0] print('Downloading %s ...' % tr(output_filename)) + bar.update() url_save(url, output_filepath, bar, refer = refer, faker = faker, headers = headers) bar.done() else: parts = [] print('Downloading %s.%s ...' % (tr(title), ext)) + bar.update() for i, url in enumerate(urls): filename = '%s[%02d].%s' % (title, i, ext) filepath = os.path.join(output_dir, filename) From d470c8c29aa9910ac733411ab606b4f44f125fef Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Sat, 23 Jan 2016 13:10:42 +0800 Subject: [PATCH 0010/1225] [ffmpeg] more check_call replacing wrong 'raise's --- src/you_get/processor/ffmpeg.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/you_get/processor/ffmpeg.py b/src/you_get/processor/ffmpeg.py index 6b61ae1837..7262c46218 100644 --- a/src/you_get/processor/ffmpeg.py +++ b/src/you_get/processor/ffmpeg.py @@ -170,11 +170,9 @@ def ffmpeg_concat_mp4_to_mp4(files, output='output.mp4'): params.append(output + '.txt') params += ['-c', 'copy', output] - if subprocess.call(params) == 0: - os.remove(output + '.txt') - return True - else: - raise + subprocess.check_call(params) + os.remove(output + '.txt') + return True for file in files: if os.path.isfile(file): @@ -196,9 +194,7 @@ def ffmpeg_concat_mp4_to_mp4(files, output='output.mp4'): else: params += ['-c', 'copy', '-absf', 'aac_adtstoasc', output] - if subprocess.call(params) == 0: - for file in files: - os.remove(file + '.ts') - return True - else: - raise + subprocess.check_call(params) + for file in files: + os.remove(file + '.ts') + return True From 3941e0d1c67e7597eed930947f05d93d8ce729f0 Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Sun, 24 Jan 2016 18:46:41 +0800 Subject: [PATCH 0011/1225] [bar] fix bar size --- src/you_get/common.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/you_get/common.py b/src/you_get/common.py index ebdc6f429d..e147703464 100755 --- a/src/you_get/common.py +++ b/src/you_get/common.py @@ -540,8 +540,7 @@ def url_save_chunked(url, filepath, bar, refer = None, is_part = False, faker = os.rename(temp_filepath, filepath) class SimpleProgressBar: - # minus the size of all statically known size in self.bar - bar_size = term.get_terminal_size()[1] - 38 + term_size = term.get_terminal_size()[1] def __init__(self, total_size, total_pieces = 1): self.displayed = False @@ -553,8 +552,10 @@ def __init__(self, total_size, total_pieces = 1): self.last_updated = time.time() total_pieces_len = len(str(total_pieces)) + # 38 is the size of all statically known size in self.bar + self.bar_size = self.term_size - 38 - 2*total_pieces_len self.bar = '{0:>5}%% ({1:>5}/{2:<5}MB) ├{3:─<%s}┤[{4:>%s}/{5:>%s}] {6}' % ( - self.bar_size - 2*total_pieces_len, total_pieces_len, total_pieces_len) + self.bar_size, total_pieces_len, total_pieces_len) def update(self): self.displayed = True From a9f063f2e802b2ae1ff15abe04969c886f4da5b3 Mon Sep 17 00:00:00 2001 From: Mort Yao Date: Mon, 25 Jan 2016 14:37:29 +0100 Subject: [PATCH 0012/1225] [tumblr] fix #901 (1) --- src/you_get/extractors/tumblr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/you_get/extractors/tumblr.py b/src/you_get/extractors/tumblr.py index 3969042a02..7f23b15bf3 100644 --- a/src/you_get/extractors/tumblr.py +++ b/src/you_get/extractors/tumblr.py @@ -66,7 +66,7 @@ def tumblr_download(url, output_dir='.', merge=True, info_only=False, **kwargs): if not real_url: real_url = r1(r']+src=[\'"]([^\'"]*)[\'"]', html) + iframe_url = r1(r']+src=[\'"]([^\'"]*)[\'"]', html) if iframe_url[:2] == '//': iframe_url = 'http:' + iframe_url if re.search(r'player\.vimeo\.com', iframe_url): vimeo_download(iframe_url, output_dir, merge=merge, info_only=info_only, From 13168259f93ed1a63acadace6234e7a25de23b58 Mon Sep 17 00:00:00 2001 From: Mort Yao Date: Mon, 25 Jan 2016 14:48:55 +0100 Subject: [PATCH 0013/1225] [tumblr] fix #901 (2, embedded vine videos) --- src/you_get/extractors/tumblr.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/you_get/extractors/tumblr.py b/src/you_get/extractors/tumblr.py index 7f23b15bf3..1fd48940b6 100644 --- a/src/you_get/extractors/tumblr.py +++ b/src/you_get/extractors/tumblr.py @@ -6,6 +6,7 @@ from .universal import * from .dailymotion import dailymotion_download from .vimeo import vimeo_download +from .vine import vine_download def tumblr_download(url, output_dir='.', merge=True, info_only=False, **kwargs): if re.match(r'https?://\d+\.media\.tumblr\.com/', url): @@ -75,6 +76,9 @@ def tumblr_download(url, output_dir='.', merge=True, info_only=False, **kwargs): elif re.search(r'dailymotion\.com', iframe_url): dailymotion_download(iframe_url, output_dir, merge=merge, info_only=info_only, **kwargs) return + elif re.search(r'vine\.co', iframe_url): + vine_download(iframe_url, output_dir, merge=merge, info_only=info_only, **kwargs) + return else: iframe_html = get_content(iframe_url) real_url = r1(r' Date: Sun, 31 Jan 2016 15:00:09 +0800 Subject: [PATCH 0014/1225] =?UTF-8?q?Fix=20=E7=A7=92=E6=8B=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E8=A7=86=E9=A2=91=E6=A0=87=E8=AF=86=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E6=8D=A2=E8=A1=8C=E7=AC=A6=E7=AD=89=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=AD=A3=E5=88=99=E5=8C=B9=E9=85=8D=E5=BC=82=E5=B8=B8=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/you_get/extractors/miaopai.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/you_get/extractors/miaopai.py b/src/you_get/extractors/miaopai.py index 030e39b45c..235650957e 100644 --- a/src/you_get/extractors/miaopai.py +++ b/src/you_get/extractors/miaopai.py @@ -16,14 +16,14 @@ def miaopai_download(url, output_dir = '.', merge = False, info_only = False, ** 'User-Agent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' } webpage_url = re.search(r'(http://video.weibo.com/show\?fid=\d{4}:\w{32})\w*', url).group(1) + '&type=mp4' #mobile - + #grab download URL a = get_content(webpage_url, headers= fake_headers_mobile , decoded=True) url = match1(a, r'