|
|
@ -542,11 +542,11 @@ class InfoExtractor(object):
|
|
|
|
raise ExtractorError('An extractor error has occurred.', cause=e)
|
|
|
|
raise ExtractorError('An extractor error has occurred.', cause=e)
|
|
|
|
|
|
|
|
|
|
|
|
def __maybe_fake_ip_and_retry(self, countries):
|
|
|
|
def __maybe_fake_ip_and_retry(self, countries):
|
|
|
|
if (not self._downloader.params.get('geo_bypass_country', None) and
|
|
|
|
if (not self._downloader.params.get('geo_bypass_country', None)
|
|
|
|
self._GEO_BYPASS and
|
|
|
|
and self._GEO_BYPASS
|
|
|
|
self._downloader.params.get('geo_bypass', True) and
|
|
|
|
and self._downloader.params.get('geo_bypass', True)
|
|
|
|
not self._x_forwarded_for_ip and
|
|
|
|
and not self._x_forwarded_for_ip
|
|
|
|
countries):
|
|
|
|
and countries):
|
|
|
|
country_code = random.choice(countries)
|
|
|
|
country_code = random.choice(countries)
|
|
|
|
self._x_forwarded_for_ip = GeoUtils.random_ipv4(country_code)
|
|
|
|
self._x_forwarded_for_ip = GeoUtils.random_ipv4(country_code)
|
|
|
|
if self._x_forwarded_for_ip:
|
|
|
|
if self._x_forwarded_for_ip:
|
|
|
@ -682,8 +682,8 @@ class InfoExtractor(object):
|
|
|
|
|
|
|
|
|
|
|
|
def __check_blocked(self, content):
|
|
|
|
def __check_blocked(self, content):
|
|
|
|
first_block = content[:512]
|
|
|
|
first_block = content[:512]
|
|
|
|
if ('<title>Access to this site is blocked</title>' in content and
|
|
|
|
if ('<title>Access to this site is blocked</title>' in content
|
|
|
|
'Websense' in first_block):
|
|
|
|
and 'Websense' in first_block):
|
|
|
|
msg = 'Access to this webpage has been blocked by Websense filtering software in your network.'
|
|
|
|
msg = 'Access to this webpage has been blocked by Websense filtering software in your network.'
|
|
|
|
blocked_iframe = self._html_search_regex(
|
|
|
|
blocked_iframe = self._html_search_regex(
|
|
|
|
r'<iframe src="([^"]+)"', content,
|
|
|
|
r'<iframe src="([^"]+)"', content,
|
|
|
@ -701,8 +701,8 @@ class InfoExtractor(object):
|
|
|
|
if block_msg:
|
|
|
|
if block_msg:
|
|
|
|
msg += ' (Message: "%s")' % block_msg.replace('\n', ' ')
|
|
|
|
msg += ' (Message: "%s")' % block_msg.replace('\n', ' ')
|
|
|
|
raise ExtractorError(msg, expected=True)
|
|
|
|
raise ExtractorError(msg, expected=True)
|
|
|
|
if ('<title>TTK :: Доступ к ресурсу ограничен</title>' in content and
|
|
|
|
if ('<title>TTK :: Доступ к ресурсу ограничен</title>' in content
|
|
|
|
'blocklist.rkn.gov.ru' in content):
|
|
|
|
and 'blocklist.rkn.gov.ru' in content):
|
|
|
|
raise ExtractorError(
|
|
|
|
raise ExtractorError(
|
|
|
|
'Access to this webpage has been blocked by decision of the Russian government. '
|
|
|
|
'Access to this webpage has been blocked by decision of the Russian government. '
|
|
|
|
'Visit http://blocklist.rkn.gov.ru/ for a block reason.',
|
|
|
|
'Visit http://blocklist.rkn.gov.ru/ for a block reason.',
|
|
|
@ -1709,8 +1709,8 @@ class InfoExtractor(object):
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
tbr = float_or_none(
|
|
|
|
tbr = float_or_none(
|
|
|
|
last_stream_inf.get('AVERAGE-BANDWIDTH') or
|
|
|
|
last_stream_inf.get('AVERAGE-BANDWIDTH')
|
|
|
|
last_stream_inf.get('BANDWIDTH'), scale=1000)
|
|
|
|
or last_stream_inf.get('BANDWIDTH'), scale=1000)
|
|
|
|
format_id = []
|
|
|
|
format_id = []
|
|
|
|
if m3u8_id:
|
|
|
|
if m3u8_id:
|
|
|
|
format_id.append(m3u8_id)
|
|
|
|
format_id.append(m3u8_id)
|
|
|
@ -2504,8 +2504,8 @@ class InfoExtractor(object):
|
|
|
|
if str_or_none(s_attr.get(lbl))
|
|
|
|
if str_or_none(s_attr.get(lbl))
|
|
|
|
]
|
|
|
|
]
|
|
|
|
width = int_or_none(s_attr.get('width'))
|
|
|
|
width = int_or_none(s_attr.get('width'))
|
|
|
|
height = (int_or_none(s_attr.get('height')) or
|
|
|
|
height = (int_or_none(s_attr.get('height'))
|
|
|
|
int_or_none(s_attr.get('res')))
|
|
|
|
or int_or_none(s_attr.get('res')))
|
|
|
|
if not width or not height:
|
|
|
|
if not width or not height:
|
|
|
|
for lbl in labels:
|
|
|
|
for lbl in labels:
|
|
|
|
resolution = parse_resolution(lbl)
|
|
|
|
resolution = parse_resolution(lbl)
|
|
|
@ -2847,8 +2847,8 @@ class InfoExtractor(object):
|
|
|
|
return not any_restricted
|
|
|
|
return not any_restricted
|
|
|
|
|
|
|
|
|
|
|
|
def extract_subtitles(self, *args, **kwargs):
|
|
|
|
def extract_subtitles(self, *args, **kwargs):
|
|
|
|
if (self._downloader.params.get('writesubtitles', False) or
|
|
|
|
if (self._downloader.params.get('writesubtitles', False)
|
|
|
|
self._downloader.params.get('listsubtitles')):
|
|
|
|
or self._downloader.params.get('listsubtitles')):
|
|
|
|
return self._get_subtitles(*args, **kwargs)
|
|
|
|
return self._get_subtitles(*args, **kwargs)
|
|
|
|
return {}
|
|
|
|
return {}
|
|
|
|
|
|
|
|
|
|
|
@ -2873,8 +2873,8 @@ class InfoExtractor(object):
|
|
|
|
return ret
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
def extract_automatic_captions(self, *args, **kwargs):
|
|
|
|
def extract_automatic_captions(self, *args, **kwargs):
|
|
|
|
if (self._downloader.params.get('writeautomaticsub', False) or
|
|
|
|
if (self._downloader.params.get('writeautomaticsub', False)
|
|
|
|
self._downloader.params.get('listsubtitles')):
|
|
|
|
or self._downloader.params.get('listsubtitles')):
|
|
|
|
return self._get_automatic_captions(*args, **kwargs)
|
|
|
|
return self._get_automatic_captions(*args, **kwargs)
|
|
|
|
return {}
|
|
|
|
return {}
|
|
|
|
|
|
|
|
|
|
|
@ -2882,9 +2882,9 @@ class InfoExtractor(object):
|
|
|
|
raise NotImplementedError('This method must be implemented by subclasses')
|
|
|
|
raise NotImplementedError('This method must be implemented by subclasses')
|
|
|
|
|
|
|
|
|
|
|
|
def mark_watched(self, *args, **kwargs):
|
|
|
|
def mark_watched(self, *args, **kwargs):
|
|
|
|
if (self._downloader.params.get('mark_watched', False) and
|
|
|
|
if (self._downloader.params.get('mark_watched', False)
|
|
|
|
(self._get_login_info()[0] is not None or
|
|
|
|
and (self._get_login_info()[0] is not None
|
|
|
|
self._downloader.params.get('cookiefile') is not None)):
|
|
|
|
or self._downloader.params.get('cookiefile') is not None)):
|
|
|
|
self._mark_watched(*args, **kwargs)
|
|
|
|
self._mark_watched(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
def _mark_watched(self, *args, **kwargs):
|
|
|
|
def _mark_watched(self, *args, **kwargs):
|
|
|
|