From 1e79316e20c26aeb79712ab3f364147d04e28c9f Mon Sep 17 00:00:00 2001 From: LE Date: Sat, 26 Jun 2021 07:44:43 -0400 Subject: [PATCH] [TBS] Support livestreams (#448) Authored by: llacb47 --- yt_dlp/extractor/tbs.py | 9 ++++++--- yt_dlp/extractor/turner.py | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/yt_dlp/extractor/tbs.py b/yt_dlp/extractor/tbs.py index e8a7c65e0..f7d7c1836 100644 --- a/yt_dlp/extractor/tbs.py +++ b/yt_dlp/extractor/tbs.py @@ -16,7 +16,7 @@ from ..utils import ( class TBSIE(TurnerBaseIE): - _VALID_URL = r'https?://(?:www\.)?(?Ptbs|tntdrama)\.com(?P/(?:movies|shows/[^/]+/(?:clips|season-\d+/episode-\d+))/(?P[^/?#]+))' + _VALID_URL = r'https?://(?:www\.)?(?Ptbs|tntdrama)\.com(?P/(?:movies|watchtnt|shows/[^/]+/(?:clips|season-\d+/episode-\d+))/(?P[^/?#]+))' _TESTS = [{ 'url': 'http://www.tntdrama.com/shows/the-alienist/clips/monster', 'info_dict': { @@ -45,7 +45,8 @@ class TBSIE(TurnerBaseIE): drupal_settings = self._parse_json(self._search_regex( r']+?data-drupal-selector="drupal-settings-json"[^>]*?>({.+?})', webpage, 'drupal setting'), display_id) - video_data = next(v for v in drupal_settings['turner_playlist'] if v.get('url') == path) + isLive = 'watchtnt' in path + video_data = next(v for v in drupal_settings['turner_playlist'] if isLive or v.get('url') == path) media_id = video_data['mediaID'] title = video_data['title'] @@ -56,7 +57,8 @@ class TBSIE(TurnerBaseIE): media_id, tokenizer_query, { 'url': url, 'site_name': site[:3].upper(), - 'auth_required': video_data.get('authRequired') == '1', + 'auth_required': video_data.get('authRequired') == '1' or isLive, + 'is_live': isLive }) thumbnails = [] @@ -85,5 +87,6 @@ class TBSIE(TurnerBaseIE): 'season_number': int_or_none(video_data.get('season')), 'episode_number': int_or_none(video_data.get('episode')), 'thumbnails': thumbnails, + 'is_live': isLive }) return info diff --git a/yt_dlp/extractor/turner.py b/yt_dlp/extractor/turner.py index 81229a54b..3d7a348b0 100644 --- a/yt_dlp/extractor/turner.py +++ b/yt_dlp/extractor/turner.py @@ -221,6 +221,7 @@ class TurnerBaseIE(AdobePassIE): } def _extract_ngtv_info(self, media_id, tokenizer_query, ap_data=None): + is_live = ap_data.get('is_live') streams_data = self._download_json( 'http://medium.ngtv.io/media/%s/tv' % media_id, media_id)['media']['tv'] @@ -237,11 +238,11 @@ class TurnerBaseIE(AdobePassIE): 'http://token.ngtv.io/token/token_spe', m3u8_url, media_id, ap_data or {}, tokenizer_query) formats.extend(self._extract_m3u8_formats( - m3u8_url, media_id, 'mp4', m3u8_id='hls', fatal=False)) + m3u8_url, media_id, 'mp4', m3u8_id='hls', live=is_live, fatal=False)) duration = float_or_none(stream_data.get('totalRuntime')) - if not chapters: + if not chapters and not is_live: for chapter in stream_data.get('contentSegments', []): start_time = float_or_none(chapter.get('start')) chapter_duration = float_or_none(chapter.get('duration'))