diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py index 3eea0cdf6b..bb595f924b 100644 --- a/yt_dlp/extractor/_extractors.py +++ b/yt_dlp/extractor/_extractors.py @@ -1866,6 +1866,7 @@ from .sharepoint import SharePointIE from .sharevideos import ShareVideosEmbedIE from .shemaroome import ShemarooMeIE +from .shiey import ShieyIE from .showroomlive import ShowRoomLiveIE from .sibnet import SibnetEmbedIE from .simplecast import ( diff --git a/yt_dlp/extractor/shiey.py b/yt_dlp/extractor/shiey.py new file mode 100644 index 0000000000..4e3a815fc6 --- /dev/null +++ b/yt_dlp/extractor/shiey.py @@ -0,0 +1,34 @@ +import json + +from .common import InfoExtractor +from .vimeo import VimeoIE +from ..utils import extract_attributes +from ..utils.traversal import find_element, traverse_obj + + +class ShieyIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?shiey\.com/videos/v/(?P[^/?#]+)' + + _TESTS = [{ + 'url': 'https://www.shiey.com/videos/v/train-journey-to-edge-of-serbia-ep-2', + 'info_dict': { + 'id': '1103409448', + 'ext': 'mp4', + 'title': 'Train Journey To Edge of Serbia (Ep. 2)', + 'uploader': 'shiey', + 'uploader_url': '', + 'duration': 1364, + 'thumbnail': r're:^https?://.+', + }, + 'params': {'skip_download': True}, + 'expected_warnings': ['Failed to parse XML: not well-formed'], + }] + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + oembed_html = traverse_obj(webpage, ( + {find_element(attr='data-controller', value='VideoEmbed', html=True)}, + {extract_attributes}, 'data-config-embed-video', {json.loads}, 'oembedHtml', {str})) + + return self.url_result(VimeoIE._extract_url(url, oembed_html), VimeoIE)