diff options
| author | Remita Amine <remitamine@gmail.com> | 2020-12-07 15:12:54 +0100 | 
|---|---|---|
| committer | Remita Amine <remitamine@gmail.com> | 2020-12-07 15:12:54 +0100 | 
| commit | 6956db3606e7ffa638856f1816747f544c1b1a53 (patch) | |
| tree | 578ae8ffc0cdf7ab2e74e6a0941c32afc94e2896 | |
| parent | 17b01228f84713df850912b554675bbfcbc62fb3 (diff) | |
[tvplay:home] Fix extraction(closes #21153)
| -rw-r--r-- | youtube_dl/extractor/tvplay.py | 90 | 
1 files changed, 35 insertions, 55 deletions
| diff --git a/youtube_dl/extractor/tvplay.py b/youtube_dl/extractor/tvplay.py index 3c2450dd0..0d858c025 100644 --- a/youtube_dl/extractor/tvplay.py +++ b/youtube_dl/extractor/tvplay.py @@ -12,11 +12,13 @@ from ..utils import (      determine_ext,      ExtractorError,      int_or_none, +    parse_duration,      parse_iso8601,      qualities,      try_get,      update_url_query,      url_or_none, +    urljoin,  ) @@ -414,7 +416,7 @@ class ViafreeIE(InfoExtractor):  class TVPlayHomeIE(InfoExtractor): -    _VALID_URL = r'https?://tvplay\.(?:tv3\.lt|skaties\.lv|tv3\.ee)/[^/]+/[^/?#&]+-(?P<id>\d+)' +    _VALID_URL = r'https?://(?:tv3?)?play\.(?:tv3\.lt|skaties\.lv|tv3\.ee)/(?:[^/]+/)*[^/?#&]+-(?P<id>\d+)'      _TESTS = [{          'url': 'https://tvplay.tv3.lt/aferistai-n-7/aferistai-10047125/',          'info_dict': { @@ -433,80 +435,58 @@ class TVPlayHomeIE(InfoExtractor):          'params': {              'skip_download': True,          }, -        'add_ie': [TVPlayIE.ie_key()],      }, {          'url': 'https://tvplay.skaties.lv/vinas-melo-labak/vinas-melo-labak-10280317/',          'only_matching': True,      }, {          'url': 'https://tvplay.tv3.ee/cool-d-ga-mehhikosse/cool-d-ga-mehhikosse-10044354/',          'only_matching': True, +    }, { +        'url': 'https://play.tv3.lt/aferistai-10047125', +        'only_matching': True, +    }, { +        'url': 'https://tv3play.skaties.lv/vinas-melo-labak-10280317', +        'only_matching': True, +    }, { +        'url': 'https://play.tv3.ee/cool-d-ga-mehhikosse-10044354', +        'only_matching': True,      }]      def _real_extract(self, url):          video_id = self._match_id(url) -        webpage = self._download_webpage(url, video_id) - -        video_id = self._search_regex( -            r'data-asset-id\s*=\s*["\'](\d{5,})\b', webpage, 'video id') - -        if len(video_id) < 8: -            return self.url_result( -                'mtg:%s' % video_id, ie=TVPlayIE.ie_key(), video_id=video_id) +        asset = self._download_json( +            urljoin(url, '/sb/public/asset/' + video_id), video_id) -        m3u8_url = self._search_regex( -            r'data-file\s*=\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage, -            'm3u8 url', group='url') +        m3u8_url = asset['movie']['contentUrl'] +        video_id = asset['assetId'] +        asset_title = asset['title'] +        title = asset_title['title']          formats = self._extract_m3u8_formats( -            m3u8_url, video_id, 'mp4', entry_protocol='m3u8_native', -            m3u8_id='hls') +            m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls')          self._sort_formats(formats) -        title = self._search_regex( -            r'data-title\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1', webpage, -            'title', default=None, group='value') or self._html_search_meta( -            'title', webpage, default=None) or self._og_search_title( -            webpage) - -        description = self._html_search_meta( -            'description', webpage, -            default=None) or self._og_search_description(webpage) - -        thumbnail = self._search_regex( -            r'data-image\s*=\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage, -            'thumbnail', default=None, group='url') or self._html_search_meta( -            'thumbnail', webpage, default=None) or self._og_search_thumbnail( -            webpage) - -        duration = int_or_none(self._search_regex( -            r'data-duration\s*=\s*["\'](\d+)', webpage, 'duration', -            fatal=False)) +        thumbnails = None +        image_url = asset.get('imageUrl') +        if image_url: +            thumbnails = [{ +                'url': urljoin(url, image_url), +                'ext': 'jpg', +            }] -        season = self._search_regex( -            (r'data-series-title\s*=\s*(["\'])[^/]+/(?P<value>(?:(?!\1).)+)\1', -             r'\bseason\s*:\s*(["\'])(?P<value>(?:(?!\1).)+)\1'), webpage, -            'season', default=None, group='value') -        season_number = int_or_none(self._search_regex( -            r'(\d+)(?:[.\s]+sezona|\s+HOOAEG)', season or '', 'season number', -            default=None)) -        episode = self._search_regex( -            (r'\bepisode\s*:\s*(["\'])(?P<value>(?:(?!\1).)+)\1', -             r'data-subtitle\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1'), webpage, -            'episode', default=None, group='value') -        episode_number = int_or_none(self._search_regex( -            r'(?:S[eē]rija|Osa)\s+(\d+)', episode or '', 'episode number', -            default=None)) +        metadata = asset.get('metadata') or {}          return {              'id': video_id,              'title': title, -            'description': description, -            'thumbnail': thumbnail, -            'duration': duration, -            'season': season, -            'season_number': season_number, -            'episode': episode, -            'episode_number': episode_number, +            'description': asset_title.get('summaryLong') or asset_title.get('summaryShort'), +            'thumbnails': thumbnails, +            'duration': parse_duration(asset_title.get('runTime')), +            'series': asset.get('tvSeriesTitle'), +            'season': asset.get('tvSeasonTitle'), +            'season_number': int_or_none(metadata.get('seasonNumber')), +            'episode': asset_title.get('titleBrief'), +            'episode_number': int_or_none(metadata.get('episodeNumber')),              'formats': formats,          } | 
