diff options
| -rw-r--r-- | youtube_dl/extractor/tv4.py | 62 | 
1 files changed, 22 insertions, 40 deletions
| diff --git a/youtube_dl/extractor/tv4.py b/youtube_dl/extractor/tv4.py index cfcce020a..51923e44a 100644 --- a/youtube_dl/extractor/tv4.py +++ b/youtube_dl/extractor/tv4.py @@ -1,13 +1,12 @@  # coding: utf-8  from __future__ import unicode_literals +import re +  from .common import InfoExtractor -from ..compat import compat_str  from ..utils import (      int_or_none,      parse_iso8601, -    try_get, -    determine_ext,  ) @@ -78,42 +77,25 @@ class TV4IE(InfoExtractor):          title = info['title'] -        subtitles = {} -        formats = [] -        # http formats are linked with unresolvable host -        for kind in ('hls3', ''): -            data = self._download_json( -                'https://prima.tv4play.se/api/web/asset/%s/play.json' % video_id, -                video_id, 'Downloading sources JSON', query={ -                    'protocol': kind, -                    'videoFormat': 'MP4+WEBVTT', -                }) -            items = try_get(data, lambda x: x['playback']['items']['item']) -            if not items: -                continue -            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', -                            }]}) +        manifest_url = self._download_json( +            'https://playback-api.b17g.net/media/' + video_id, +            video_id, query={ +                'service': 'tv4', +                'device': 'browser', +                'protocol': 'hls', +            })['playbackItem']['manifestUrl'] +        formats = self._extract_m3u8_formats( +            manifest_url, video_id, 'mp4', +            'm3u8_native', m3u8_id='hls', fatal=False) +        formats.extend(self._extract_mpd_formats( +            manifest_url.replace('.m3u8', '.mpd'), +            video_id, mpd_id='dash', fatal=False)) +        formats.extend(self._extract_f4m_formats( +            manifest_url.replace('.m3u8', '.f4m'), +            video_id, f4m_id='hds', fatal=False)) +        formats.extend(self._extract_ism_formats( +            re.sub(r'\.ism/.+?\.m3u8', r'.ism/Manifest', manifest_url), +            video_id, ism_id='mss', fatal=False))          if not formats and info.get('is_geo_restricted'):              self.raise_geo_restricted(countries=self._GEO_COUNTRIES) @@ -124,7 +106,7 @@ class TV4IE(InfoExtractor):              'id': video_id,              'title': title,              'formats': formats, -            'subtitles': subtitles, +            # 'subtitles': subtitles,              'description': info.get('description'),              'timestamp': parse_iso8601(info.get('broadcast_date_time')),              'duration': int_or_none(info.get('duration')), | 
