Compare commits

..

No commits in common. "d548bffaea6e78c0e33ebfcb315795d1db083d5f" and "cc1e6f5a4ba281b489ad3df27f817e1de874f22b" have entirely different histories.

View File

@ -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(
f'https://api.play.sbs.co.kr/1.0/sbs_vodall/{video_id}', video_id,
note=f'Downloading m3u8 information {rscuse}',
@ -89,22 +89,19 @@ class SBSCoKrIE(InfoExtractor):
def _real_extract(self, url):
video_id = self._match_id(url)
details = self._call_api(video_id)
source = traverse_obj(details, ('vod', 'source', 'mediasource', {dict})) or {}
details = self.request_details(video_id)
source = traverse_obj(details, ('vod', 'source', 'mediasource'))
formats = []
for stream in traverse_obj(details, (
'vod', 'source', 'mediasourcelist', lambda _, v: v['mediaurl'] or v['mediarscuse']
), default=[source]):
for stream in traverse_obj(details, ('vod', 'source', 'mediasourcelist'), default=[source]):
if not stream.get('mediaurl'):
new_source = traverse_obj(
self._call_api(video_id, rscuse=stream['mediarscuse']),
('vod', 'source', 'mediasource', {dict})) or {}
alt_details = self.request_details(video_id, rscuse=stream.get('mediarscuse'))
new_source = traverse_obj(alt_details, ('vod', 'source', 'mediasource'))
if new_source.get('mediarscuse') == source.get('mediarscuse') or not new_source.get('mediaurl'):
continue
stream = new_source
formats.append({
'url': stream['mediaurl'],
'url': stream.get('mediaurl'),
'format_id': stream.get('mediarscuse'),
'format_note': stream.get('medianame'),
**parse_resolution(stream.get('quality')),
@ -112,6 +109,7 @@ class SBSCoKrIE(InfoExtractor):
})
caption_url = traverse_obj(details, ('vod', 'source', 'subtitle', {url_or_none}))
subtitles = {'ko': [{'url': caption_url}]} if caption_url else None
return {
'id': video_id,
@ -129,13 +127,13 @@ class SBSCoKrIE(InfoExtractor):
'thumbnail': ('source', 'thumbnail', 'origin', {url_or_none}),
}), get_all=False),
'formats': formats,
'subtitles': {'ko': [{'url': caption_url}]} if caption_url else None,
'subtitles': subtitles,
}
class SBSCoKrAllvodProgramIE(InfoExtractor):
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 = [{
'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(
[self.url_result(f'https://allvod.sbs.co.kr/allvod/vodEndPage.do?mdaId={video_id}', SBSCoKrIE)
for video_id in traverse_obj(details, ('list', ..., 'mdaId'))], program_id)
[self.url_result(
'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):
@ -192,9 +191,10 @@ class SBSCoKrProgramsVodIE(InfoExtractor):
def _real_extract(self, 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,
note='Downloading program menu data')['program']['programid']
note='Downloading program menu data')
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)