Browse Source
Rename --cn-verfication-proxy to --geo-verification-proxy
And deprecate the former one
Since commit f138873900
, this option is
not limited to China websites, so rename it.
master
Yen Chi Hsuan
8 years ago
No known key found for this signature in database
GPG Key ID: 3FDDD575826C5C30
10 changed files with
36 additions and
50 deletions
-
youtube_dl/YoutubeDL.py
-
youtube_dl/__init__.py
-
youtube_dl/extractor/common.py
-
youtube_dl/extractor/iqiyi.py
-
youtube_dl/extractor/kuwo.py
-
youtube_dl/extractor/leeco.py
-
youtube_dl/extractor/rai.py
-
youtube_dl/extractor/sohu.py
-
youtube_dl/extractor/youku.py
-
youtube_dl/options.py
|
|
@ -196,8 +196,8 @@ class YoutubeDL(object): |
|
|
|
prefer_insecure: Use HTTP instead of HTTPS to retrieve information. |
|
|
|
At the moment, this is only supported by YouTube. |
|
|
|
proxy: URL of the proxy server to use |
|
|
|
cn_verification_proxy: URL of the proxy to use for IP address verification |
|
|
|
on Chinese sites. (Experimental) |
|
|
|
geo_verification_proxy: URL of the proxy to use for IP address verification |
|
|
|
on geo-restricted sites. (Experimental) |
|
|
|
socket_timeout: Time to wait for unresponsive hosts, in seconds |
|
|
|
bidi_workaround: Work around buggy terminals without bidirectional text |
|
|
|
support, using fridibi |
|
|
@ -304,6 +304,11 @@ class YoutubeDL(object): |
|
|
|
self.params.update(params) |
|
|
|
self.cache = Cache(self) |
|
|
|
|
|
|
|
if self.params.get('cn_verification_proxy') is not None: |
|
|
|
self.report_warning('--cn-verification-proxy is deprecated. Use --geo-verification-proxy instead.') |
|
|
|
if self.params.get('geo_verification_proxy') is None: |
|
|
|
self.params['geo_verification_proxy'] = self.params['cn_verification_proxy'] |
|
|
|
|
|
|
|
if params.get('bidi_workaround', False): |
|
|
|
try: |
|
|
|
import pty |
|
|
|
|
|
@ -382,6 +382,8 @@ def _real_main(argv=None): |
|
|
|
'external_downloader_args': external_downloader_args, |
|
|
|
'postprocessor_args': postprocessor_args, |
|
|
|
'cn_verification_proxy': opts.cn_verification_proxy, |
|
|
|
'geo_verification_proxy': opts.geo_verification_proxy, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
with YoutubeDL(ydl_opts) as ydl: |
|
|
|
|
|
@ -1729,6 +1729,13 @@ class InfoExtractor(object): |
|
|
|
def _mark_watched(self, *args, **kwargs): |
|
|
|
raise NotImplementedError('This method must be implemented by subclasses') |
|
|
|
|
|
|
|
def geo_verification_headers(self): |
|
|
|
headers = {} |
|
|
|
geo_verification_proxy = self._downloader.params.get('geo_verification_proxy') |
|
|
|
if geo_verification_proxy: |
|
|
|
headers['Ytdl-request-proxy'] = geo_verification_proxy |
|
|
|
return headers |
|
|
|
|
|
|
|
|
|
|
|
class SearchInfoExtractor(InfoExtractor): |
|
|
|
""" |
|
|
|
|
|
@ -293,14 +293,10 @@ class IqiyiIE(InfoExtractor): |
|
|
|
't': tm, |
|
|
|
} |
|
|
|
|
|
|
|
headers = {} |
|
|
|
cn_verification_proxy = self._downloader.params.get('cn_verification_proxy') |
|
|
|
if cn_verification_proxy: |
|
|
|
headers['Ytdl-request-proxy'] = cn_verification_proxy |
|
|
|
return self._download_json( |
|
|
|
'http://cache.m.iqiyi.com/jp/tmts/%s/%s/' % (tvid, video_id), |
|
|
|
video_id, transform_source=lambda s: remove_start(s, 'var tvInfoJs='), |
|
|
|
query=params, headers=headers) |
|
|
|
query=params, headers=self.geo_verification_headers()) |
|
|
|
|
|
|
|
def _extract_playlist(self, webpage): |
|
|
|
PAGE_SIZE = 50 |
|
|
|
|
|
@ -26,11 +26,6 @@ class KuwoBaseIE(InfoExtractor): |
|
|
|
def _get_formats(self, song_id, tolerate_ip_deny=False): |
|
|
|
formats = [] |
|
|
|
for file_format in self._FORMATS: |
|
|
|
headers = {} |
|
|
|
cn_verification_proxy = self._downloader.params.get('cn_verification_proxy') |
|
|
|
if cn_verification_proxy: |
|
|
|
headers['Ytdl-request-proxy'] = cn_verification_proxy |
|
|
|
|
|
|
|
query = { |
|
|
|
'format': file_format['ext'], |
|
|
|
'br': file_format.get('br', ''), |
|
|
@ -42,7 +37,7 @@ class KuwoBaseIE(InfoExtractor): |
|
|
|
song_url = self._download_webpage( |
|
|
|
'http://antiserver.kuwo.cn/anti.s', |
|
|
|
song_id, note='Download %s url info' % file_format['format'], |
|
|
|
query=query, headers=headers, |
|
|
|
query=query, headers=self.geo_verification_headers(), |
|
|
|
) |
|
|
|
|
|
|
|
if song_url == 'IPDeny' and not tolerate_ip_deny: |
|
|
|
|
|
@ -20,7 +20,6 @@ from ..utils import ( |
|
|
|
int_or_none, |
|
|
|
orderedSet, |
|
|
|
parse_iso8601, |
|
|
|
sanitized_Request, |
|
|
|
str_or_none, |
|
|
|
url_basename, |
|
|
|
urshift, |
|
|
@ -121,16 +120,11 @@ class LeIE(InfoExtractor): |
|
|
|
'tkey': self.calc_time_key(int(time.time())), |
|
|
|
'domain': 'www.le.com' |
|
|
|
} |
|
|
|
play_json_req = sanitized_Request( |
|
|
|
'http://api.le.com/mms/out/video/playJson?' + compat_urllib_parse_urlencode(params) |
|
|
|
) |
|
|
|
cn_verification_proxy = self._downloader.params.get('cn_verification_proxy') |
|
|
|
if cn_verification_proxy: |
|
|
|
play_json_req.add_header('Ytdl-request-proxy', cn_verification_proxy) |
|
|
|
|
|
|
|
play_json = self._download_json( |
|
|
|
play_json_req, |
|
|
|
media_id, 'Downloading playJson data') |
|
|
|
'http://api.le.com/mms/out/video/playJson', |
|
|
|
media_id, 'Downloading playJson data', query=params, |
|
|
|
headers=self.geo_verification_headers()) |
|
|
|
|
|
|
|
# Check for errors |
|
|
|
playstatus = play_json['playstatus'] |
|
|
|
|
|
@ -20,17 +20,12 @@ class RaiBaseIE(InfoExtractor): |
|
|
|
formats = [] |
|
|
|
|
|
|
|
for platform in ('mon', 'flash', 'native'): |
|
|
|
headers = {} |
|
|
|
# TODO: rename --cn-verification-proxy |
|
|
|
cn_verification_proxy = self._downloader.params.get('cn_verification_proxy') |
|
|
|
if cn_verification_proxy: |
|
|
|
headers['Ytdl-request-proxy'] = cn_verification_proxy |
|
|
|
|
|
|
|
relinker = self._download_xml( |
|
|
|
relinker_url, video_id, |
|
|
|
note='Downloading XML metadata for platform %s' % platform, |
|
|
|
transform_source=fix_xml_ampersands, |
|
|
|
query={'output': 45, 'pl': platform}, headers=headers) |
|
|
|
query={'output': 45, 'pl': platform}, |
|
|
|
headers=self.geo_verification_headers()) |
|
|
|
|
|
|
|
media_url = find_xpath_attr(relinker, './url', 'type', 'content').text |
|
|
|
if media_url == 'http://download.rai.it/video_no_available.mp4': |
|
|
|
|
|
@ -8,10 +8,7 @@ from ..compat import ( |
|
|
|
compat_str, |
|
|
|
compat_urllib_parse_urlencode, |
|
|
|
) |
|
|
|
from ..utils import ( |
|
|
|
ExtractorError, |
|
|
|
sanitized_Request, |
|
|
|
) |
|
|
|
from ..utils import ExtractorError |
|
|
|
|
|
|
|
|
|
|
|
class SohuIE(InfoExtractor): |
|
|
@ -96,15 +93,10 @@ class SohuIE(InfoExtractor): |
|
|
|
else: |
|
|
|
base_data_url = 'http://hot.vrs.sohu.com/vrs_flash.action?vid=' |
|
|
|
|
|
|
|
req = sanitized_Request(base_data_url + vid_id) |
|
|
|
|
|
|
|
cn_verification_proxy = self._downloader.params.get('cn_verification_proxy') |
|
|
|
if cn_verification_proxy: |
|
|
|
req.add_header('Ytdl-request-proxy', cn_verification_proxy) |
|
|
|
|
|
|
|
return self._download_json( |
|
|
|
req, video_id, |
|
|
|
'Downloading JSON data for %s' % vid_id) |
|
|
|
base_data_url + vid_id, video_id, |
|
|
|
'Downloading JSON data for %s' % vid_id, |
|
|
|
headers=self.geo_verification_headers()) |
|
|
|
|
|
|
|
mobj = re.match(self._VALID_URL, url) |
|
|
|
video_id = mobj.group('id') |
|
|
|
|
|
@ -16,7 +16,6 @@ from ..compat import ( |
|
|
|
from ..utils import ( |
|
|
|
ExtractorError, |
|
|
|
get_element_by_attribute, |
|
|
|
sanitized_Request, |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
@ -218,14 +217,10 @@ class YoukuIE(InfoExtractor): |
|
|
|
headers = { |
|
|
|
'Referer': req_url, |
|
|
|
} |
|
|
|
headers.update(self.geo_verification_headers()) |
|
|
|
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) |
|
|
|
raw_data = self._download_json(req_url, video_id, note=note, headers=headers) |
|
|
|
|
|
|
|
return raw_data['data'] |
|
|
|
|
|
|
|
|
|
@ -209,11 +209,16 @@ def parseOpts(overrideArguments=None): |
|
|
|
action='store_const', const='::', dest='source_address', |
|
|
|
help='Make all connections via IPv6 (experimental)', |
|
|
|
) |
|
|
|
network.add_option( |
|
|
|
'--geo-verification-proxy', |
|
|
|
dest='geo_verification_proxy', default=None, metavar='URL', |
|
|
|
help='Use this proxy to verify the IP address for some geo-restricted sites. ' |
|
|
|
'The default proxy specified by --proxy (or none, if the options is not present) is used for the actual downloading. (experimental)' |
|
|
|
) |
|
|
|
network.add_option( |
|
|
|
'--cn-verification-proxy', |
|
|
|
dest='cn_verification_proxy', default=None, metavar='URL', |
|
|
|
help='Use this proxy to verify the IP address for some Chinese sites. ' |
|
|
|
'The default proxy specified by --proxy (or none, if the options is not present) is used for the actual downloading. (experimental)' |
|
|
|
help=optparse.SUPPRESS_HELP, |
|
|
|
) |
|
|
|
|
|
|
|
selection = optparse.OptionGroup(parser, 'Video Selection') |
|
|
|