aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLesmiscore (Naoya Ozaki) <nao20010128@gmail.com>2022-01-19 22:45:35 +0900
committerGitHub <noreply@github.com>2022-01-19 19:15:35 +0530
commitba1c671d2e6e9694cc286e2f64a9edb70939d32a (patch)
treea67dbe673132252177d275b8be8ed9c01d01100b
parentb143e83ec9eacece56e57d396c03bd91c99d11ff (diff)
downloadhypervideo-pre-ba1c671d2e6e9694cc286e2f64a9edb70939d32a.tar.lz
hypervideo-pre-ba1c671d2e6e9694cc286e2f64a9edb70939d32a.tar.xz
hypervideo-pre-ba1c671d2e6e9694cc286e2f64a9edb70939d32a.zip
[mixch] Add `MixchArchiveIE` (#2373)
Closes #2363 Authored by: Lesmiscore
-rw-r--r--yt_dlp/extractor/extractors.py5
-rw-r--r--yt_dlp/extractor/mixch.py32
2 files changed, 35 insertions, 2 deletions
diff --git a/yt_dlp/extractor/extractors.py b/yt_dlp/extractor/extractors.py
index 1bfe2e22f..2190b9c9f 100644
--- a/yt_dlp/extractor/extractors.py
+++ b/yt_dlp/extractor/extractors.py
@@ -829,7 +829,10 @@ from .mirrativ import (
)
from .mit import TechTVMITIE, OCWMITIE
from .mitele import MiTeleIE
-from .mixch import MixchIE
+from .mixch import (
+ MixchIE,
+ MixchArchiveIE,
+)
from .mixcloud import (
MixcloudIE,
MixcloudUserIE,
diff --git a/yt_dlp/extractor/mixch.py b/yt_dlp/extractor/mixch.py
index a99ddd172..31f450dfa 100644
--- a/yt_dlp/extractor/mixch.py
+++ b/yt_dlp/extractor/mixch.py
@@ -11,7 +11,7 @@ class MixchIE(InfoExtractor):
IE_NAME = 'mixch'
_VALID_URL = r'https?://(?:www\.)?mixch\.tv/u/(?P<id>\d+)'
- TESTS = [{
+ _TESTS = [{
'url': 'https://mixch.tv/u/16236849/live',
'skip': 'don\'t know if this live persists',
'info_dict': {
@@ -53,3 +53,33 @@ class MixchIE(InfoExtractor):
}],
'is_live': True,
}
+
+
+class MixchArchiveIE(InfoExtractor):
+ IE_NAME = 'mixch:archive'
+ _VALID_URL = r'https?://(?:www\.)?mixch\.tv/archive/(?P<id>\d+)'
+
+ _TESTS = [{
+ 'url': 'https://mixch.tv/archive/421',
+ 'skip': 'paid video, no DRM. expires at Jan 23',
+ 'info_dict': {
+ 'id': '421',
+ 'title': '96NEKO SHOW TIME',
+ }
+ }]
+
+ def _real_extract(self, url):
+ video_id = self._match_id(url)
+ webpage = self._download_webpage(url, video_id)
+
+ html5_videos = self._parse_html5_media_entries(
+ url, webpage.replace('video-js', 'video'), video_id, 'hls')
+ if not html5_videos:
+ self.raise_login_required(method='cookies')
+ infodict = html5_videos[0]
+ infodict.update({
+ 'id': video_id,
+ 'title': self._html_search_regex(r'class="archive-title">(.+?)</', webpage, 'title')
+ })
+
+ return infodict