[viidea] Capture and output lecture error message (#14099)
authorSergey M․ <dstftw@gmail.com>
Sat, 2 Sep 2017 08:44:49 +0000 (15:44 +0700)
committerSergey M․ <dstftw@gmail.com>
Sat, 2 Sep 2017 08:44:49 +0000 (15:44 +0700)
youtube_dl/extractor/viidea.py

index 4adcd183030438762f4a82be90adb171e1a38d34..a0abbae60fee59fda14d8cf7ac5a235a3df7472d 100644 (file)
@@ -4,12 +4,14 @@ import re
 
 from .common import InfoExtractor
 from ..compat import (
-    compat_urlparse,
+    compat_HTTPError,
     compat_str,
+    compat_urlparse,
 )
 from ..utils import (
-    parse_duration,
+    ExtractorError,
     js_to_json,
+    parse_duration,
     parse_iso8601,
 )
 
@@ -128,9 +130,16 @@ class ViideaIE(InfoExtractor):
 
         base_url = self._proto_relative_url(cfg['livepipe'], 'http:')
 
-        lecture_data = self._download_json(
-            '%s/site/api/lecture/%s?format=json' % (base_url, lecture_id),
-            lecture_id)['lecture'][0]
+        try:
+            lecture_data = self._download_json(
+                '%s/site/api/lecture/%s?format=json' % (base_url, lecture_id),
+                lecture_id)['lecture'][0]
+        except ExtractorError as e:
+            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:
+                msg = self._parse_json(
+                    e.cause.read().decode('utf-8'), lecture_id)
+                raise ExtractorError(msg['detail'], expected=True)
+            raise
 
         lecture_info = {
             'id': lecture_id,