Merge pull request #12909 from remitamine/raw-sub
[youtube-dl] / youtube_dl / extractor / toutv.py
index d2d5c117163b296db815ebfc41f19ad8f67ed1d2..e59ed266109d16e12e7c64a9ba499ef4c116e449 100644 (file)
@@ -5,7 +5,6 @@ from .common import InfoExtractor
 from ..utils import (
     int_or_none,
     js_to_json,
-    ExtractorError,
     urlencode_postdata,
     extract_attributes,
     smuggle_url,
@@ -15,11 +14,11 @@ from ..utils import (
 class TouTvIE(InfoExtractor):
     _NETRC_MACHINE = 'toutv'
     IE_NAME = 'tou.tv'
-    _VALID_URL = r'https?://ici\.tou\.tv/(?P<id>[a-zA-Z0-9_-]+/S[0-9]+E[0-9]+)'
+    _VALID_URL = r'https?://ici\.tou\.tv/(?P<id>[a-zA-Z0-9_-]+(?:/S[0-9]+E[0-9]+)?)'
     _access_token = None
     _claims = None
 
-    _TEST = {
+    _TESTS = [{
         'url': 'http://ici.tou.tv/garfield-tout-court/S2015E17',
         'info_dict': {
             'id': '122017',
@@ -33,7 +32,10 @@ class TouTvIE(InfoExtractor):
             'skip_download': True,
         },
         'skip': '404 Not Found',
-    }
+    }, {
+        'url': 'http://ici.tou.tv/hackers',
+        'only_matching': True,
+    }]
 
     def _real_initialize(self):
         email, password = self._get_login_info()
@@ -53,7 +55,7 @@ class TouTvIE(InfoExtractor):
                 'state': state,
             })
         login_form = self._search_regex(
-            r'(?s)(<form[^>]+id="Form-login".+?</form>)', login_webpage, 'login form')
+            r'(?s)(<form[^>]+(?:id|name)="Form-login".+?</form>)', login_webpage, 'login form')
         form_data = self._hidden_inputs(login_form)
         form_data.update({
             'login-email': email,
@@ -75,8 +77,10 @@ class TouTvIE(InfoExtractor):
     def _real_extract(self, url):
         path = self._match_id(url)
         metadata = self._download_json('http://ici.tou.tv/presentation/%s' % path, path)
+        # IsDrm does not necessarily mean the video is DRM protected (see
+        # https://github.com/rg3/youtube-dl/issues/13994).
         if metadata.get('IsDrm'):
-            raise ExtractorError('This video is DRM protected.', expected=True)
+            self.report_warning('This video is probably DRM protected.', path)
         video_id = metadata['IdMedia']
         details = metadata['Details']
         title = details['OriginalTitle']