commit: c931c4b8ddb32371cddf48ea52d0c036a6a66240
parent 7acd042bbb555962f42fa4f0f236772194d2da64
Author: Remita Amine <remitamine@gmail.com>
Date: Tue, 29 Dec 2020 14:09:10 +0100
[sevenplay] detect API errors
Diffstat:
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/youtube_dl/extractor/sevenplus.py b/youtube_dl/extractor/sevenplus.py
@@ -4,8 +4,12 @@ from __future__ import unicode_literals
import re
from .brightcove import BrightcoveNewIE
-from ..compat import compat_str
+from ..compat import (
+ compat_HTTPError,
+ compat_str,
+)
from ..utils import (
+ ExtractorError,
try_get,
update_url_query,
)
@@ -41,16 +45,22 @@ class SevenPlusIE(BrightcoveNewIE):
def _real_extract(self, url):
path, episode_id = re.match(self._VALID_URL, url).groups()
- media = self._download_json(
- 'https://videoservice.swm.digital/playback', episode_id, query={
- 'appId': '7plus',
- 'deviceType': 'web',
- 'platformType': 'web',
- 'accountId': 5303576322001,
- 'referenceId': 'ref:' + episode_id,
- 'deliveryId': 'csai',
- 'videoType': 'vod',
- })['media']
+ try:
+ media = self._download_json(
+ 'https://videoservice.swm.digital/playback', episode_id, query={
+ 'appId': '7plus',
+ 'deviceType': 'web',
+ 'platformType': 'web',
+ 'accountId': 5303576322001,
+ 'referenceId': 'ref:' + episode_id,
+ 'deliveryId': 'csai',
+ 'videoType': 'vod',
+ })['media']
+ except ExtractorError as e:
+ if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:
+ raise ExtractorError(self._parse_json(
+ e.cause.read().decode(), episode_id)[0]['error_code'], expected=True)
+ raise
for source in media.get('sources', {}):
src = source.get('src')