[bilibili] Support new Bangumi URLs (closes #11845)
[youtube-dl] / youtube_dl / extractor / amcnetworks.py
index be9552541c2d468fb5330db6c4b7651f90c10324..87c803e948fd2e04cde6b0b43251d3f804b952a0 100644 (file)
@@ -5,18 +5,19 @@ from .theplatform import ThePlatformIE
 from ..utils import (
     update_url_query,
     parse_age_limit,
+    int_or_none,
 )
 
 
 class AMCNetworksIE(ThePlatformIE):
-    _VALID_URL = r'https?://(?:www\.)?(?:amc|bbcamerica|ifc|wetv)\.com/(?:movies/|shows/[^/]+/(?:full-episodes/)?season-\d+/episode-\d+(?:-(?:[^/]+/)?|/))(?P<id>[^/?#]+)'
+    _VALID_URL = r'https?://(?:www\.)?(?:amc|bbcamerica|ifc|wetv)\.com/(?:movies/|shows/[^/]+/(?:full-episodes/)?[^/]+/episode-\d+(?:-(?:[^/]+/)?|/))(?P<id>[^/?#]+)'
     _TESTS = [{
         'url': 'http://www.ifc.com/shows/maron/season-04/episode-01/step-1',
         'md5': '',
         'info_dict': {
             'id': 's3MX01Nl4vPH',
             'ext': 'mp4',
-            'title': 'Step 1',
+            'title': 'Maron - Season 4 - Step 1',
             'description': 'In denial about his current situation, Marc is reluctantly convinced by his friends to enter rehab. Starring Marc Maron and Constance Zimmer.',
             'age_limit': 17,
             'upload_date': '20160505',
@@ -27,6 +28,7 @@ class AMCNetworksIE(ThePlatformIE):
             # m3u8 download
             'skip_download': True,
         },
+        'skip': 'Requires TV provider accounts',
     }, {
         'url': 'http://www.bbcamerica.com/shows/the-hunt/full-episodes/season-1/episode-01-the-hardest-challenge',
         'only_matching': True,
@@ -39,6 +41,9 @@ class AMCNetworksIE(ThePlatformIE):
     }, {
         'url': 'http://www.ifc.com/movies/chaos',
         'only_matching': True,
+    }, {
+        'url': 'http://www.bbcamerica.com/shows/doctor-who/full-episodes/the-power-of-the-daleks/episode-01-episode-1-color-version',
+        'only_matching': True,
     }]
 
     def _real_extract(self, url):
@@ -65,8 +70,26 @@ class AMCNetworksIE(ThePlatformIE):
         self._sort_formats(formats)
         info.update({
             'id': video_id,
-            'subtiles': subtitles,
+            'subtitles': subtitles,
             'formats': formats,
             'age_limit': parse_age_limit(parse_age_limit(rating)),
         })
+        ns_keys = theplatform_metadata.get('$xmlns', {}).keys()
+        if ns_keys:
+            ns = list(ns_keys)[0]
+            series = theplatform_metadata.get(ns + '$show')
+            season_number = int_or_none(theplatform_metadata.get(ns + '$season'))
+            episode = theplatform_metadata.get(ns + '$episodeTitle')
+            episode_number = int_or_none(theplatform_metadata.get(ns + '$episode'))
+            if season_number:
+                title = 'Season %d - %s' % (season_number, title)
+            if series:
+                title = '%s - %s' % (series, title)
+            info.update({
+                'title': title,
+                'series': series,
+                'season_number': season_number,
+                'episode': episode,
+                'episode_number': episode_number,
+            })
         return info