فهرست منبع

[subtitles] Use self._download_webpage for extracting the subtitles

It raises ExtractorError for the same exceptions we have to catch.
Jaime Marquínez Ferrándiz 12 سال پیش
والد
کامیت
7fad1c6328
3فایلهای تغییر یافته به همراه11 افزوده شده و 18 حذف شده
  1. 4 6
      youtube_dl/extractor/dailymotion.py
  2. 3 9
      youtube_dl/extractor/subtitles.py
  3. 4 3
      youtube_dl/extractor/youtube.py

+ 4 - 6
youtube_dl/extractor/dailymotion.py

@@ -1,14 +1,11 @@
 import re
 import json
 import itertools
-import socket
 
 from .common import InfoExtractor
 from .subtitles import SubtitlesInfoExtractor
 
 from ..utils import (
-    compat_http_client,
-    compat_urllib_error,
     compat_urllib_request,
     compat_str,
     get_element_by_attribute,
@@ -98,10 +95,11 @@ class DailymotionIE(SubtitlesInfoExtractor):
         }]
 
     def _get_available_subtitles(self, video_id):
-        request = compat_urllib_request.Request('https://api.dailymotion.com/video/%s/subtitles?fields=id,language,url' % video_id)
         try:
-            sub_list = compat_urllib_request.urlopen(request).read().decode('utf-8')
-        except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
+            sub_list = self._download_webpage(
+                'https://api.dailymotion.com/video/%s/subtitles?fields=id,language,url' % video_id,
+                video_id, note=False)
+        except ExtractorError as err:
             self._downloader.report_warning(u'unable to download video subtitles: %s' % compat_str(err))
             return {}
         info = json.loads(sub_list)

+ 3 - 9
youtube_dl/extractor/subtitles.py

@@ -1,12 +1,8 @@
-import socket
-
 from .common import InfoExtractor
 
 from ..utils import (
-    compat_http_client,
-    compat_urllib_error,
-    compat_urllib_request,
     compat_str,
+    ExtractorError,
 )
 
 
@@ -52,8 +48,8 @@ class SubtitlesInfoExtractor(InfoExtractor):
     def _request_subtitle_url(self, sub_lang, url):
         """ makes the http request for the subtitle """
         try:
-            sub = compat_urllib_request.urlopen(url).read().decode('utf-8')
-        except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
+            sub = self._download_webpage(url, None, note=False)
+        except ExtractorError as err:
             self._downloader.report_warning(u'unable to download video subtitles for %s: %s' % (sub_lang, compat_str(err)))
             return
         if not sub:
@@ -88,5 +84,3 @@ class SubtitlesInfoExtractor(InfoExtractor):
         elif self._downloader.params.get('writeautomaticsub', False):
             video_subtitles = self._request_automatic_caption(video_id, video_webpage)
         return video_subtitles
-
-

+ 4 - 3
youtube_dl/extractor/youtube.py

@@ -454,10 +454,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
             return self._decrypt_signature(s)
 
     def _get_available_subtitles(self, video_id):
-        request = compat_urllib_request.Request('http://video.google.com/timedtext?hl=en&type=list&v=%s' % video_id)
         try:
-            sub_list = compat_urllib_request.urlopen(request).read().decode('utf-8')
-        except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
+            sub_list = self._download_webpage(
+                'http://video.google.com/timedtext?hl=en&type=list&v=%s' % video_id,
+                video_id, note=False)
+        except ExtractorError as err:
             self._downloader.report_warning(u'unable to download video subtitles: %s' % compat_str(err))
             return {}
         lang_list = re.findall(r'name="([^"]*)"[^>]+lang_code="([\w\-]+)"', sub_list)