mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-09-22 18:31:25 +02:00
Compare commits
No commits in common. "d548bffaea6e78c0e33ebfcb315795d1db083d5f" and "cc1e6f5a4ba281b489ad3df27f817e1de874f22b" have entirely different histories.
d548bffaea
...
cc1e6f5a4b
|
@ -73,7 +73,7 @@ class SBSCoKrIE(InfoExtractor):
|
||||||
},
|
},
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _call_api(self, video_id, rscuse=''):
|
def request_details(self, video_id, rscuse=''):
|
||||||
return self._download_json(
|
return self._download_json(
|
||||||
f'https://api.play.sbs.co.kr/1.0/sbs_vodall/{video_id}', video_id,
|
f'https://api.play.sbs.co.kr/1.0/sbs_vodall/{video_id}', video_id,
|
||||||
note=f'Downloading m3u8 information {rscuse}',
|
note=f'Downloading m3u8 information {rscuse}',
|
||||||
|
@ -89,22 +89,19 @@ class SBSCoKrIE(InfoExtractor):
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
|
|
||||||
details = self._call_api(video_id)
|
details = self.request_details(video_id)
|
||||||
source = traverse_obj(details, ('vod', 'source', 'mediasource', {dict})) or {}
|
source = traverse_obj(details, ('vod', 'source', 'mediasource'))
|
||||||
|
|
||||||
formats = []
|
formats = []
|
||||||
for stream in traverse_obj(details, (
|
for stream in traverse_obj(details, ('vod', 'source', 'mediasourcelist'), default=[source]):
|
||||||
'vod', 'source', 'mediasourcelist', lambda _, v: v['mediaurl'] or v['mediarscuse']
|
|
||||||
), default=[source]):
|
|
||||||
if not stream.get('mediaurl'):
|
if not stream.get('mediaurl'):
|
||||||
new_source = traverse_obj(
|
alt_details = self.request_details(video_id, rscuse=stream.get('mediarscuse'))
|
||||||
self._call_api(video_id, rscuse=stream['mediarscuse']),
|
new_source = traverse_obj(alt_details, ('vod', 'source', 'mediasource'))
|
||||||
('vod', 'source', 'mediasource', {dict})) or {}
|
|
||||||
if new_source.get('mediarscuse') == source.get('mediarscuse') or not new_source.get('mediaurl'):
|
if new_source.get('mediarscuse') == source.get('mediarscuse') or not new_source.get('mediaurl'):
|
||||||
continue
|
continue
|
||||||
stream = new_source
|
stream = new_source
|
||||||
formats.append({
|
formats.append({
|
||||||
'url': stream['mediaurl'],
|
'url': stream.get('mediaurl'),
|
||||||
'format_id': stream.get('mediarscuse'),
|
'format_id': stream.get('mediarscuse'),
|
||||||
'format_note': stream.get('medianame'),
|
'format_note': stream.get('medianame'),
|
||||||
**parse_resolution(stream.get('quality')),
|
**parse_resolution(stream.get('quality')),
|
||||||
|
@ -112,6 +109,7 @@ class SBSCoKrIE(InfoExtractor):
|
||||||
})
|
})
|
||||||
|
|
||||||
caption_url = traverse_obj(details, ('vod', 'source', 'subtitle', {url_or_none}))
|
caption_url = traverse_obj(details, ('vod', 'source', 'subtitle', {url_or_none}))
|
||||||
|
subtitles = {'ko': [{'url': caption_url}]} if caption_url else None
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
@ -129,13 +127,13 @@ class SBSCoKrIE(InfoExtractor):
|
||||||
'thumbnail': ('source', 'thumbnail', 'origin', {url_or_none}),
|
'thumbnail': ('source', 'thumbnail', 'origin', {url_or_none}),
|
||||||
}), get_all=False),
|
}), get_all=False),
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'subtitles': {'ko': [{'url': caption_url}]} if caption_url else None,
|
'subtitles': subtitles,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class SBSCoKrAllvodProgramIE(InfoExtractor):
|
class SBSCoKrAllvodProgramIE(InfoExtractor):
|
||||||
IE_NAME = 'sbs.co.kr:allvod_program'
|
IE_NAME = 'sbs.co.kr:allvod_program'
|
||||||
_VALID_URL = r'https?://allvod\.sbs\.co\.kr/allvod/vod(?:Free)?ProgramDetail\.do\?(?:[^#]+&)?pgmId=(?P<id>P?\d+)'
|
_VALID_URL = r'https?://allvod\.sbs\.co\.kr/allvod/vod(?:Free)?ProgramDetail\.do\?(?:[^#]+&)?pgmId=(?P<id>P?[0-9]+)'
|
||||||
|
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://allvod.sbs.co.kr/allvod/vodFreeProgramDetail.do?type=legend&pgmId=22000010159&listOrder=vodCntAsc',
|
'url': 'https://allvod.sbs.co.kr/allvod/vodFreeProgramDetail.do?type=legend&pgmId=22000010159&listOrder=vodCntAsc',
|
||||||
|
@ -165,8 +163,9 @@ class SBSCoKrAllvodProgramIE(InfoExtractor):
|
||||||
})
|
})
|
||||||
|
|
||||||
return self.playlist_result(
|
return self.playlist_result(
|
||||||
[self.url_result(f'https://allvod.sbs.co.kr/allvod/vodEndPage.do?mdaId={video_id}', SBSCoKrIE)
|
[self.url_result(
|
||||||
for video_id in traverse_obj(details, ('list', ..., 'mdaId'))], program_id)
|
'https://allvod.sbs.co.kr/allvod/vodEndPage.do?mdaId=' + video_id, SBSCoKrIE
|
||||||
|
) for video_id in traverse_obj(details, ('list', ..., 'mdaId'), default=[])], program_id)
|
||||||
|
|
||||||
|
|
||||||
class SBSCoKrProgramsVodIE(InfoExtractor):
|
class SBSCoKrProgramsVodIE(InfoExtractor):
|
||||||
|
@ -192,9 +191,10 @@ class SBSCoKrProgramsVodIE(InfoExtractor):
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
program_slug = self._match_id(url)
|
program_slug = self._match_id(url)
|
||||||
|
|
||||||
program_id = self._download_json(
|
menu_data = self._download_json(
|
||||||
f'https://static.apis.sbs.co.kr/program-api/1.0/menu/{program_slug}', program_slug,
|
f'https://static.apis.sbs.co.kr/program-api/1.0/menu/{program_slug}', program_slug,
|
||||||
note='Downloading program menu data')['program']['programid']
|
note='Downloading program menu data')
|
||||||
|
|
||||||
return self.url_result(
|
return self.url_result(
|
||||||
f'https://allvod.sbs.co.kr/allvod/vodProgramDetail.do?pgmId={program_id}', SBSCoKrAllvodProgramIE)
|
'https://allvod.sbs.co.kr/allvod/vodProgramDetail.do?pgmId=' + traverse_obj(
|
||||||
|
menu_data, ('program', 'programid')), SBSCoKrAllvodProgramIE)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user