diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py index d8abf0b5d..b518e285d 100644 --- a/yt_dlp/extractor/_extractors.py +++ b/yt_dlp/extractor/_extractors.py @@ -310,6 +310,7 @@ from .businessinsider import BusinessInsiderIE from .buzzfeed import BuzzFeedIE from .byutv import BYUtvIE from .c56 import C56IE +from .cablecasttv import CableCastTVIE from .caffeinetv import CaffeineTVIE from .callin import CallinIE from .caltrans import CaltransIE diff --git a/yt_dlp/extractor/cablecasttv.py b/yt_dlp/extractor/cablecasttv.py new file mode 100644 index 000000000..a8ca5bcdd --- /dev/null +++ b/yt_dlp/extractor/cablecasttv.py @@ -0,0 +1,47 @@ +from .common import InfoExtractor + + +class CableCastTVIE(InfoExtractor): + _VALID_URL = r'https?://(?:[a-z\-\.]+\.cablecast\.tv/show/|[a-z\-\.]+/CablecastPublicSite/show/)(?P\d+)' + _TESTS = [{ + 'url': 'https://wctv.wilmette.com/CablecastPublicSite/show/532', + 'md5': '17e7ed129582babf6d1ae5c3b9d70d18', + 'info_dict': { + 'id': '532', + 'ext': 'mp4', + 'title': 'Village Board Meeting 4/24/24', + }, + }, { + 'url': 'https://capitoltvri.cablecast.tv/show/9199?site=1', + 'only_matching': True, + }, { + 'url': 'https://king-county-tv.cablecast.tv/show/504', + 'only_matching': True, + }, { + 'url': 'https://wctv.wilmette.com/CablecastPublicSite/show/53/', + 'only_matching': True, + }] + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + + url_video_page = self._html_search_regex(r']*class=\"trms-player\"[^>]*src=\"([^\"]+)\"', webpage, 'url_video_webpage') + webpage_video = self._download_webpage(url_video_page, video_id) + video_url = self._html_search_regex(r'"([^\"]*\.m3u8)"', webpage_video, 'video URL') + + formats = [] + subtitles = {} + + fmts, subs = self._extract_m3u8_formats_and_subtitles(video_url, video_id, 'mp4', fatal=False) + formats.extend(fmts) + self._merge_subtitles(subs, target=subtitles) + + title = self._og_search_title(webpage) or self._html_search_regex(r'(.+?)', webpage, 'title') + + return { + 'id': video_id, + 'title': title, + 'formats': formats, + 'subtitles': subtitles, + }