diff options
Diffstat (limited to 'youtube_dl/extractor/tv4.py')
| -rw-r--r-- | youtube_dl/extractor/tv4.py | 53 | 
1 files changed, 33 insertions, 20 deletions
diff --git a/youtube_dl/extractor/tv4.py b/youtube_dl/extractor/tv4.py index 5d2d8f132..ad79db92b 100644 --- a/youtube_dl/extractor/tv4.py +++ b/youtube_dl/extractor/tv4.py @@ -4,11 +4,10 @@ from __future__ import unicode_literals  from .common import InfoExtractor  from ..compat import compat_str  from ..utils import ( -    ExtractorError,      int_or_none,      parse_iso8601,      try_get, -    update_url_query, +    determine_ext,  ) @@ -28,24 +27,24 @@ class TV4IE(InfoExtractor):      _TESTS = [          {              'url': 'http://www.tv4.se/kalla-fakta/klipp/kalla-fakta-5-english-subtitles-2491650', -            'md5': '909d6454b87b10a25aa04c4bdd416a9b', +            'md5': 'cb837212f342d77cec06e6dad190e96d',              'info_dict': {                  'id': '2491650',                  'ext': 'mp4',                  'title': 'Kalla Fakta 5 (english subtitles)', -                'thumbnail': 're:^https?://.*\.jpg$', +                'thumbnail': r're:^https?://.*\.jpg$',                  'timestamp': int,                  'upload_date': '20131125',              },          },          {              'url': 'http://www.tv4play.se/iframe/video/3054113', -            'md5': '77f851c55139ffe0ebd41b6a5552489b', +            'md5': 'cb837212f342d77cec06e6dad190e96d',              'info_dict': {                  'id': '3054113',                  'ext': 'mp4',                  'title': 'Så här jobbar ficktjuvarna - se avslöjande bilder', -                'thumbnail': 're:^https?://.*\.jpg$', +                'thumbnail': r're:^https?://.*\.jpg$',                  'description': 'Unika bilder avslöjar hur turisternas fickor vittjas mitt på Stockholms central. Två experter på ficktjuvarna avslöjar knepen du ska se upp för.',                  'timestamp': int,                  'upload_date': '20150130', @@ -75,11 +74,10 @@ class TV4IE(InfoExtractor):          # If is_geo_restricted is true, it doesn't necessarily mean we can't download it          if info.get('is_geo_restricted'):              self.report_warning('This content might not be available in your country due to licensing restrictions.') -        if info.get('requires_subscription'): -            raise ExtractorError('This content requires subscription.', expected=True)          title = info['title'] +        subtitles = {}          formats = []          # http formats are linked with unresolvable host          for kind in ('hls', ''): @@ -87,26 +85,41 @@ class TV4IE(InfoExtractor):                  'https://prima.tv4play.se/api/web/asset/%s/play.json' % video_id,                  video_id, 'Downloading sources JSON', query={                      'protocol': kind, -                    'videoFormat': 'MP4+WEBVTTS+WEBVTT', +                    'videoFormat': 'MP4+WEBVTT',                  }) -            item = try_get(data, lambda x: x['playback']['items']['item'], dict) -            manifest_url = item.get('url') -            if not isinstance(manifest_url, compat_str): +            items = try_get(data, lambda x: x['playback']['items']['item']) +            if not items:                  continue -            if kind == 'hls': -                formats.extend(self._extract_m3u8_formats( -                    manifest_url, video_id, 'mp4', entry_protocol='m3u8_native', -                    m3u8_id=kind, fatal=False)) -            else: -                formats.extend(self._extract_f4m_formats( -                    update_url_query(manifest_url, {'hdcore': '3.8.0'}), -                    video_id, f4m_id='hds', fatal=False)) +            if isinstance(items, dict): +                items = [items] +            for item in items: +                manifest_url = item.get('url') +                if not isinstance(manifest_url, compat_str): +                    continue +                ext = determine_ext(manifest_url) +                if ext == 'm3u8': +                    formats.extend(self._extract_m3u8_formats( +                        manifest_url, video_id, 'mp4', entry_protocol='m3u8_native', +                        m3u8_id=kind, fatal=False)) +                elif ext == 'f4m': +                    formats.extend(self._extract_akamai_formats( +                        manifest_url, video_id, { +                            'hls': 'tv4play-i.akamaihd.net', +                        })) +                elif ext == 'webvtt': +                    subtitles = self._merge_subtitles( +                        subtitles, { +                            'sv': [{ +                                'url': manifest_url, +                                'ext': 'vtt', +                            }]})          self._sort_formats(formats)          return {              'id': video_id,              'title': title,              'formats': formats, +            'subtitles': subtitles,              'description': info.get('description'),              'timestamp': parse_iso8601(info.get('broadcast_date_time')),              'duration': int_or_none(info.get('duration')),  | 
