mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-17 21:14:04 -05:00
[fox] detect geo restriction and authentication errors(#20208)
This commit is contained in:
parent
10734553fe
commit
0d08bcdb70
1 changed files with 28 additions and 4 deletions
|
@ -6,10 +6,12 @@
|
||||||
|
|
||||||
from .adobepass import AdobePassIE
|
from .adobepass import AdobePassIE
|
||||||
from ..compat import (
|
from ..compat import (
|
||||||
|
compat_HTTPError,
|
||||||
compat_str,
|
compat_str,
|
||||||
compat_urllib_parse_unquote,
|
compat_urllib_parse_unquote,
|
||||||
)
|
)
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
ExtractorError,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_age_limit,
|
parse_age_limit,
|
||||||
parse_duration,
|
parse_duration,
|
||||||
|
@ -48,6 +50,7 @@ class FOXIE(AdobePassIE):
|
||||||
'url': 'https://www.fox.com/watch/30056b295fb57f7452aeeb4920bc3024/',
|
'url': 'https://www.fox.com/watch/30056b295fb57f7452aeeb4920bc3024/',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
}]
|
}]
|
||||||
|
_GEO_BYPASS = False
|
||||||
_HOME_PAGE_URL = 'https://www.fox.com/'
|
_HOME_PAGE_URL = 'https://www.fox.com/'
|
||||||
_API_KEY = 'abdcbed02c124d393b39e818a4312055'
|
_API_KEY = 'abdcbed02c124d393b39e818a4312055'
|
||||||
_access_token = None
|
_access_token = None
|
||||||
|
@ -58,9 +61,22 @@ def _call_api(self, path, video_id, data=None):
|
||||||
}
|
}
|
||||||
if self._access_token:
|
if self._access_token:
|
||||||
headers['Authorization'] = 'Bearer ' + self._access_token
|
headers['Authorization'] = 'Bearer ' + self._access_token
|
||||||
return self._download_json(
|
try:
|
||||||
'https://api2.fox.com/v2.0/' + path,
|
return self._download_json(
|
||||||
video_id, data=data, headers=headers)
|
'https://api2.fox.com/v2.0/' + path,
|
||||||
|
video_id, data=data, headers=headers)
|
||||||
|
except ExtractorError as e:
|
||||||
|
if isinstance(e.cause, compat_HTTPError) and e.cause.status == 403:
|
||||||
|
entitlement_issues = self._parse_json(
|
||||||
|
e.cause.read().decode(), video_id)['entitlementIssues']
|
||||||
|
for e in entitlement_issues:
|
||||||
|
if e.get('errorCode') == 1005:
|
||||||
|
raise ExtractorError(
|
||||||
|
'This video is only available via cable service provider '
|
||||||
|
'subscription. You may want to use --cookies.', expected=True)
|
||||||
|
messages = ', '.join([e['message'] for e in entitlement_issues])
|
||||||
|
raise ExtractorError(messages, expected=True)
|
||||||
|
raise
|
||||||
|
|
||||||
def _real_initialize(self):
|
def _real_initialize(self):
|
||||||
if not self._access_token:
|
if not self._access_token:
|
||||||
|
@ -81,7 +97,15 @@ def _real_extract(self, url):
|
||||||
|
|
||||||
title = video['name']
|
title = video['name']
|
||||||
release_url = video['url']
|
release_url = video['url']
|
||||||
m3u8_url = self._download_json(release_url, video_id)['playURL']
|
try:
|
||||||
|
m3u8_url = self._download_json(release_url, video_id)['playURL']
|
||||||
|
except ExtractorError as e:
|
||||||
|
if isinstance(e.cause, compat_HTTPError) and e.cause.status == 403:
|
||||||
|
error = self._parse_json(e.cause.read().decode(), video_id)
|
||||||
|
if error.get('exception') == 'GeoLocationBlocked':
|
||||||
|
self.raise_geo_restricted(countries=['US'])
|
||||||
|
raise ExtractorError(error['description'], expected=True)
|
||||||
|
raise
|
||||||
formats = self._extract_m3u8_formats(
|
formats = self._extract_m3u8_formats(
|
||||||
m3u8_url, video_id, 'mp4',
|
m3u8_url, video_id, 'mp4',
|
||||||
entry_protocol='m3u8_native', m3u8_id='hls')
|
entry_protocol='m3u8_native', m3u8_id='hls')
|
||||||
|
|
Loading…
Reference in a new issue