mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-09 18:03:25 +00:00
[ie/afreecatv:catchstory] Add extractor (#10235)
Closes #10112 Authored by: hui1601
This commit is contained in:
parent
e8352ad659
commit
054a3ba7d1
|
@ -76,6 +76,7 @@
|
||||||
)
|
)
|
||||||
from .aeonco import AeonCoIE
|
from .aeonco import AeonCoIE
|
||||||
from .afreecatv import (
|
from .afreecatv import (
|
||||||
|
AfreecaTVCatchStoryIE,
|
||||||
AfreecaTVIE,
|
AfreecaTVIE,
|
||||||
AfreecaTVLiveIE,
|
AfreecaTVLiveIE,
|
||||||
AfreecaTVUserIE,
|
AfreecaTVUserIE,
|
||||||
|
|
|
@ -72,7 +72,7 @@ class AfreecaTVIE(AfreecaTVBaseIE):
|
||||||
)\?.*?\bnTitleNo=|
|
)\?.*?\bnTitleNo=|
|
||||||
vod\.afreecatv\.com/(PLAYER/STATION|player)/
|
vod\.afreecatv\.com/(PLAYER/STATION|player)/
|
||||||
)
|
)
|
||||||
(?P<id>\d+)
|
(?P<id>\d+)/?(?:$|[?#&])
|
||||||
'''
|
'''
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'http://live.afreecatv.com:8079/app/index.cgi?szType=read_ucc_bbs&szBjId=dailyapril&nStationNo=16711924&nBbsNo=18605867&nTitleNo=36164052&szSkin=',
|
'url': 'http://live.afreecatv.com:8079/app/index.cgi?szType=read_ucc_bbs&szBjId=dailyapril&nStationNo=16711924&nBbsNo=18605867&nTitleNo=36164052&szSkin=',
|
||||||
|
@ -253,6 +253,43 @@ def _real_extract(self, url):
|
||||||
return self.playlist_result(entries, video_id, multi_video=True, **common_info)
|
return self.playlist_result(entries, video_id, multi_video=True, **common_info)
|
||||||
|
|
||||||
|
|
||||||
|
class AfreecaTVCatchStoryIE(AfreecaTVBaseIE):
|
||||||
|
IE_NAME = 'afreecatv:catchstory'
|
||||||
|
IE_DESC = 'afreecatv.com catch story'
|
||||||
|
_VALID_URL = r'https?://vod\.afreecatv\.com/player/(?P<id>\d+)/catchstory'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://vod.afreecatv.com/player/103247/catchstory',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '103247',
|
||||||
|
},
|
||||||
|
'playlist_count': 2,
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_id = self._match_id(url)
|
||||||
|
data = self._download_json(
|
||||||
|
'https://api.m.afreecatv.com/catchstory/a/view', video_id, headers={'Referer': url},
|
||||||
|
query={'aStoryListIdx': '', 'nStoryIdx': video_id}, impersonate=True)
|
||||||
|
|
||||||
|
return self.playlist_result(self._entries(data), video_id)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _entries(data):
|
||||||
|
# 'files' is always a list with 1 element
|
||||||
|
yield from traverse_obj(data, (
|
||||||
|
'data', lambda _, v: v['story_type'] == 'catch',
|
||||||
|
'catch_list', lambda _, v: v['files'][0]['file'], {
|
||||||
|
'id': ('files', 0, 'file_info_key', {str}),
|
||||||
|
'url': ('files', 0, 'file', {url_or_none}),
|
||||||
|
'duration': ('files', 0, 'duration', {functools.partial(int_or_none, scale=1000)}),
|
||||||
|
'title': ('title', {str}),
|
||||||
|
'uploader': ('writer_nick', {str}),
|
||||||
|
'uploader_id': ('writer_id', {str}),
|
||||||
|
'thumbnail': ('thumb', {url_or_none}),
|
||||||
|
'timestamp': ('write_timestamp', {int_or_none}),
|
||||||
|
}))
|
||||||
|
|
||||||
|
|
||||||
class AfreecaTVLiveIE(AfreecaTVBaseIE):
|
class AfreecaTVLiveIE(AfreecaTVBaseIE):
|
||||||
IE_NAME = 'afreecatv:live'
|
IE_NAME = 'afreecatv:live'
|
||||||
IE_DESC = 'afreecatv.com livestreams'
|
IE_DESC = 'afreecatv.com livestreams'
|
||||||
|
|
Loading…
Reference in a new issue