Merge pull request #764 from jaimeMF/subtitles_not_found
authorFilippo Valsorda <filippo.valsorda@gmail.com>
Mon, 1 Apr 2013 02:02:18 +0000 (19:02 -0700)
committerFilippo Valsorda <filippo.valsorda@gmail.com>
Mon, 1 Apr 2013 02:02:18 +0000 (19:02 -0700)
Fix crash when subtitles are not found

1  2 
youtube_dl/InfoExtractors.py

index cca7e1b54be0766bdf3086b25ba25a85f2819e98,1bd9e25c4390018fa2a8e97b41653e5623fe96c1..aa8074a9e7d7c5fd690a6a31f5f8f5354d1ffcb5
@@@ -253,11 -253,11 +253,11 @@@ class YoutubeIE(InfoExtractor)
          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:
-             return (u'WARNING: unable to download video subtitles: %s' % compat_str(err), None)
+             return (u'unable to download video subtitles: %s' % compat_str(err), None)
          sub_lang_list = re.findall(r'name="([^"]*)"[^>]+lang_code="([\w\-]+)"', sub_list)
          sub_lang_list = dict((l[1], l[0]) for l in sub_lang_list)
          if not sub_lang_list:
-             return (u'WARNING: video doesn\'t have subtitles', None)
+             return (u'video doesn\'t have subtitles', None)
          return sub_lang_list
  
      def _list_available_subtitles(self, video_id):
          self.report_video_subtitles_available(video_id, sub_lang_list)
  
      def _request_subtitle(self, sub_lang, sub_name, video_id, format):
+         """
+         Return tuple:
+         (error_message, sub_lang, sub)
+         """
          self.report_video_subtitles_request(video_id, sub_lang, format)
          params = compat_urllib_parse.urlencode({
              'lang': sub_lang,
          try:
              sub = compat_urllib_request.urlopen(url).read().decode('utf-8')
          except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
-             return (u'WARNING: unable to download video subtitles: %s' % compat_str(err), None)
+             return (u'unable to download video subtitles: %s' % compat_str(err), None, None)
          if not sub:
-             return (u'WARNING: Did not fetch video subtitles', None)
+             return (u'Did not fetch video subtitles', None, None)
          return (None, sub_lang, sub)
  
      def _extract_subtitle(self, video_id):
+         """
+         Return a list with a tuple:
+         [(error_message, sub_lang, sub)]
+         """
          sub_lang_list = self._get_available_subtitles(video_id)
          sub_format = self._downloader.params.get('subtitlesformat')
+         if  isinstance(sub_lang_list,tuple): #There was some error, it didn't get the available subtitles
+             return [(sub_lang_list[0], None, None)]
          if self._downloader.params.get('subtitleslang', False):
              sub_lang = self._downloader.params.get('subtitleslang')
          elif 'en' in sub_lang_list:
          else:
              sub_lang = list(sub_lang_list.keys())[0]
          if not sub_lang in sub_lang_list:
-             return (u'WARNING: no closed captions found in the specified language "%s"' % sub_lang, None)
+             return [(u'no closed captions found in the specified language "%s"' % sub_lang, None, None)]
  
          subtitle = self._request_subtitle(sub_lang, sub_lang_list[sub_lang].encode('utf-8'), video_id, sub_format)
          return [subtitle]
      def _extract_all_subtitles(self, video_id):
          sub_lang_list = self._get_available_subtitles(video_id)
          sub_format = self._downloader.params.get('subtitlesformat')
+         if  isinstance(sub_lang_list,tuple): #There was some error, it didn't get the available subtitles
+             return [(sub_lang_list[0], None, None)]
          subtitles = []
          for sub_lang in sub_lang_list:
              subtitle = self._request_subtitle(sub_lang, sub_lang_list[sub_lang].encode('utf-8'), video_id, sub_format)
              if video_subtitles:
                  (sub_error, sub_lang, sub) = video_subtitles[0]
                  if sub_error:
-                     self._downloader.trouble(sub_error)
+                     self._downloader.report_error(sub_error)
  
          if self._downloader.params.get('allsubtitles', False):
              video_subtitles = self._extract_all_subtitles(video_id)
              for video_subtitle in video_subtitles:
                  (sub_error, sub_lang, sub) = video_subtitle
                  if sub_error:
-                     self._downloader.trouble(sub_error)
+                     self._downloader.report_error(sub_error)
  
          if self._downloader.params.get('listsubtitles', False):
              sub_lang_list = self._list_available_subtitles(video_id)
@@@ -1710,7 -1722,9 +1722,7 @@@ class YoutubePlaylistIE(InfoExtractor)
                          (?:
                             (?:course|view_play_list|my_playlists|artist|playlist|watch)
                             \? (?:.*?&)*? (?:p|a|list)=
 -                        |  user/.*?/user/
                          |  p/
 -                        |  user/.*?#[pg]/c/
                          )
                          ((?:PL|EC|UU)?[0-9A-Za-z-_]{10,})
                          .*
@@@ -3794,7 -3808,7 +3806,7 @@@ class WorldStarHipHopIE(InfoExtractor)
          _title = r"""<title>(.*)</title>"""
  
          mobj = re.search(_title, webpage_src)
 -        
 +
          if mobj is not None:
              title = mobj.group(1)
          else:
              if mobj is not None:
                  title = mobj.group(1)
              thumbnail = None
 -        
 +
          results = [{
                      'id': video_id,
                      'url' : video_url,