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'
').strip()
elif 'iframe/player.html' in url:
vid = match1(url, r'\bvid=(\w+)')
# for embedded URLs; don't know what the title is
From cc49724b76674c51ebd8b43d3bd2e9c254062f2a Mon Sep 17 00:00:00 2001
From: Mort Yao
Date: Sun, 24 Apr 2016 01:43:37 +0200
Subject: [PATCH 0110/1225] [youku] fix typos in c054da95
---
src/you_get/extractors/youku.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/you_get/extractors/youku.py b/src/you_get/extractors/youku.py
index b4fc38a7dd..3135e82251 100644
--- a/src/you_get/extractors/youku.py
+++ b/src/you_get/extractors/youku.py
@@ -171,13 +171,13 @@ def prepare(self, **kwargs):
self.password_protected = True
self.password = input(log.sprint('Password: ', log.YELLOW))
api_url += '&pwd={}'.format(self.password)
- api_url12 += '&pwd={}'.format(self.password)
+ api12_url += '&pwd={}'.format(self.password)
meta = json.loads(get_content(
api_url,
headers={'Referer': 'http://static.youku.com/'}
))
meta12 = json.loads(get_content(
- api_url12,
+ api12_url,
headers={'Referer': 'http://static.youku.com/'}
))
data = meta['data']
From b919fdd8013088daa4f28bdd8e7ed1a4ff8577d5 Mon Sep 17 00:00:00 2001
From: Danieliu
Date: Wed, 27 Apr 2016 17:13:12 +0800
Subject: [PATCH 0111/1225] Update you-get
fix python version
---
you-get | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/you-get b/you-get
index fbbdb9f266..85f3f754b7 100755
--- a/you-get
+++ b/you-get
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import os, sys
_srcdir = 'src/'
From 1a018c5261961f86dacb5c0f17648b8daad5b987 Mon Sep 17 00:00:00 2001
From: David Zhuang
Date: Wed, 27 Apr 2016 17:08:46 -0400
Subject: [PATCH 0112/1225] [Dilidili] Fix codec, fix #1085
---
src/you_get/extractors/dilidili.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/you_get/extractors/dilidili.py b/src/you_get/extractors/dilidili.py
index 615f986104..6bc6ae2831 100755
--- a/src/you_get/extractors/dilidili.py
+++ b/src/you_get/extractors/dilidili.py
@@ -40,11 +40,11 @@ def dilidili_download(url, output_dir = '.', merge = False, info_only = False, *
title = match1(html, r'(.+)丨(.+)') #title
# player loaded via internal iframe
- frame_url = re.search(r'