aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubrat Lima <74418100+subrat-lima@users.noreply.github.com>2025-03-25 03:56:45 +0530
committerGitHub <noreply@github.com>2025-03-24 22:26:45 +0000
commit3396eb50dcd245b49c0f4aecd6e80ec914095d16 (patch)
tree547919e30b25804eebc3d86596eb374bf04a739b
parent5086d4aed6aeb3908c62f49e2d8f74cc0cb05110 (diff)
[ie/17live:vod] Add extractor (#12723)
Closes #12570 Authored by: subrat-lima
-rw-r--r--yt_dlp/extractor/_extractors.py1
-rw-r--r--yt_dlp/extractor/ichinanalive.py58
2 files changed, 58 insertions, 1 deletions
diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py
index eb914d2eb..28d410fa8 100644
--- a/yt_dlp/extractor/_extractors.py
+++ b/yt_dlp/extractor/_extractors.py
@@ -839,6 +839,7 @@ from .icareus import IcareusIE
from .ichinanalive import (
IchinanaLiveClipIE,
IchinanaLiveIE,
+ IchinanaLiveVODIE,
)
from .idolplus import IdolPlusIE
from .ign import (
diff --git a/yt_dlp/extractor/ichinanalive.py b/yt_dlp/extractor/ichinanalive.py
index a37cfe77b..475d33593 100644
--- a/yt_dlp/extractor/ichinanalive.py
+++ b/yt_dlp/extractor/ichinanalive.py
@@ -1,5 +1,13 @@
+
from .common import InfoExtractor
-from ..utils import ExtractorError, str_or_none, traverse_obj, unified_strdate
+from ..utils import (
+ ExtractorError,
+ int_or_none,
+ str_or_none,
+ traverse_obj,
+ unified_strdate,
+ url_or_none,
+)
class IchinanaLiveIE(InfoExtractor):
@@ -157,3 +165,51 @@ class IchinanaLiveClipIE(InfoExtractor):
'description': view_data.get('caption'),
'upload_date': unified_strdate(str_or_none(view_data.get('createdAt'))),
}
+
+
+class IchinanaLiveVODIE(InfoExtractor):
+ IE_NAME = '17live:vod'
+ _VALID_URL = r'https?://(?:www\.)?17\.live/ja/vod/[^/?#]+/(?P<id>[^/?#]+)'
+ _TESTS = [{
+ 'url': 'https://17.live/ja/vod/27323042/2cf84520-e65e-4b22-891e-1d3a00b0f068',
+ 'md5': '3299b930d7457b069639486998a89580',
+ 'info_dict': {
+ 'id': '2cf84520-e65e-4b22-891e-1d3a00b0f068',
+ 'ext': 'mp4',
+ 'title': 'md5:b5f8cbf497d54cc6a60eb3b480182f01',
+ 'uploader': 'md5:29fb12122ab94b5a8495586e7c3085a5',
+ 'uploader_id': '27323042',
+ 'channel': '🌟γ‚ͺγƒΌγƒ«γƒŠγ‚€γƒˆγƒ‹γƒƒγƒγƒ³ γ‚’γƒΌγ‚«γ‚€γƒ–πŸŒŸ',
+ 'channel_id': '2b4f85f1-d61e-429d-a901-68d32bdd8645',
+ 'like_count': int,
+ 'view_count': int,
+ 'thumbnail': r're:https?://.+/.+\.(?:jpe?g|png)',
+ 'duration': 549,
+ 'description': 'md5:116f326579700f00eaaf5581aae1192e',
+ 'timestamp': 1741058645,
+ 'upload_date': '20250304',
+ },
+ }, {
+ 'url': 'https://17.live/ja/vod/27323042/0de11bac-9bea-40b8-9eab-0239a7d88079',
+ 'only_matching': True,
+ }]
+
+ def _real_extract(self, url):
+ video_id = self._match_id(url)
+ json_data = self._download_json(f'https://wap-api.17app.co/api/v1/vods/{video_id}', video_id)
+
+ return traverse_obj(json_data, {
+ 'id': ('vodID', {str}),
+ 'title': ('title', {str}),
+ 'formats': ('vodURL', {lambda x: self._extract_m3u8_formats(x, video_id)}),
+ 'uploader': ('userInfo', 'displayName', {str}),
+ 'uploader_id': ('userInfo', 'roomID', {int}, {str_or_none}),
+ 'channel': ('userInfo', 'name', {str}),
+ 'channel_id': ('userInfo', 'userID', {str}),
+ 'like_count': ('likeCount', {int_or_none}),
+ 'view_count': ('viewCount', {int_or_none}),
+ 'thumbnail': ('imageURL', {url_or_none}),
+ 'duration': ('duration', {int_or_none}),
+ 'description': ('description', {str}),
+ 'timestamp': ('createdAt', {int_or_none}),
+ })