diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 3da5f8020..ebe2aa1d7 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -645,6 +645,7 @@ from .livestream import ( ) from .lnkgo import LnkGoIE from .localnews8 import LocalNews8IE +from .videocdn import VideoCdnIE from .lovehomeporn import LoveHomePornIE from .lrt import LRTIE from .lynda import ( diff --git a/youtube_dl/extractor/videocdn.py b/youtube_dl/extractor/videocdn.py new file mode 100644 index 000000000..995d52ff4 --- /dev/null +++ b/youtube_dl/extractor/videocdn.py @@ -0,0 +1,62 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor + +from ..utils import ( + determine_ext, + urljoin, +) + + +class VideoCdnIE(InfoExtractor): + _VALID_URL = r'https?://e\.video-cdn\.net/video?.*video-id=(?P[a-zA-Z0-9-_]+).*' + _TESTS = [ + { + 'url': 'https://e.video-cdn.net/video?video-id=8eBUrWaMJFS38A5X-j2CgY&player-id=53Tun3ZZpZpVuvaTvsm3jU', + 'info_dict': { + 'id': '8eBUrWaMJFS38A5X-j2CgY', + 'ext': 'mp4', + 'title': 'RiskBuster FireFighter VI - Adventskranz', + 'thumbnail': r're:(?i)https://.*\.jpeg', + }, + }, + { + 'url': 'https://e.video-cdn.net/video?video-id=91imQ_wKjkTFghe-3mmBAA&player-id=7nCLZ_ESM8rT9YUw6qUGA9', + 'info_dict': { + 'id': '91imQ_wKjkTFghe-3mmBAA', + 'ext': 'mp4', + 'title': 'SCC2019_Talk_Tychsen_TXL.mp4', + 'thumbnail': r're:(?i)https://.*\.jpeg', + }, + }, + ] + + def _real_extract(self, url): + video_id = self._match_id(url) + + webpage = self._download_webpage(url, video_id) + + thumbnail = self._search_regex( + r'\"thumbnailUrl\":\"(?P[^\"]+)', + webpage, 'thumbnail', group='thumbnail', + default=None) + + title = self._search_regex(r'"name"\s*:\s*"((?:\\"|[^"])+)', webpage, 'title') + + manifest_url = self._search_regex(r'"contentUrl"\s*:\s*"((?:\\"|[^"])+)', webpage, 'manifest_url') + manifest_url = urljoin(url, manifest_url) + + formats = [] + if manifest_url and determine_ext(manifest_url) == 'm3u8': + formats.extend(self._extract_m3u8_formats( + manifest_url, video_id, 'mp4', + entry_protocol='m3u8_native', m3u8_id='m3u8')) + self._sort_formats(formats) + + return { + 'id': video_id, + 'title': title, + 'thumbnail': thumbnail, + 'formats': formats, + }