mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-09-22 18:31:25 +02:00
Compare commits
3 Commits
cc1e6f5a4b
...
d548bffaea
Author | SHA1 | Date | |
---|---|---|---|
|
d548bffaea | ||
|
20e5923c5a | ||
|
c0ab22fcc9 |
|
@ -73,7 +73,7 @@ class SBSCoKrIE(InfoExtractor):
|
||||||
},
|
},
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def request_details(self, video_id, rscuse=''):
|
def _call_api(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,19 +89,22 @@ 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.request_details(video_id)
|
details = self._call_api(video_id)
|
||||||
source = traverse_obj(details, ('vod', 'source', 'mediasource'))
|
source = traverse_obj(details, ('vod', 'source', 'mediasource', {dict})) or {}
|
||||||
|
|
||||||
formats = []
|
formats = []
|
||||||
for stream in traverse_obj(details, ('vod', 'source', 'mediasourcelist'), default=[source]):
|
for stream in traverse_obj(details, (
|
||||||
|
'vod', 'source', 'mediasourcelist', lambda _, v: v['mediaurl'] or v['mediarscuse']
|
||||||
|
), default=[source]):
|
||||||
if not stream.get('mediaurl'):
|
if not stream.get('mediaurl'):
|
||||||
alt_details = self.request_details(video_id, rscuse=stream.get('mediarscuse'))
|
new_source = traverse_obj(
|
||||||
new_source = traverse_obj(alt_details, ('vod', 'source', 'mediasource'))
|
self._call_api(video_id, rscuse=stream['mediarscuse']),
|
||||||
|
('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.get('mediaurl'),
|
'url': stream['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')),
|
||||||
|
@ -109,7 +112,6 @@ 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,
|
||||||
|
@ -127,13 +129,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': subtitles,
|
'subtitles': {'ko': [{'url': caption_url}]} if caption_url else None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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?[0-9]+)'
|
_VALID_URL = r'https?://allvod\.sbs\.co\.kr/allvod/vod(?:Free)?ProgramDetail\.do\?(?:[^#]+&)?pgmId=(?P<id>P?\d+)'
|
||||||
|
|
||||||
_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',
|
||||||
|
@ -163,9 +165,8 @@ class SBSCoKrAllvodProgramIE(InfoExtractor):
|
||||||
})
|
})
|
||||||
|
|
||||||
return self.playlist_result(
|
return self.playlist_result(
|
||||||
[self.url_result(
|
[self.url_result(f'https://allvod.sbs.co.kr/allvod/vodEndPage.do?mdaId={video_id}', SBSCoKrIE)
|
||||||
'https://allvod.sbs.co.kr/allvod/vodEndPage.do?mdaId=' + video_id, SBSCoKrIE
|
for video_id in traverse_obj(details, ('list', ..., 'mdaId'))], program_id)
|
||||||
) for video_id in traverse_obj(details, ('list', ..., 'mdaId'), default=[])], program_id)
|
|
||||||
|
|
||||||
|
|
||||||
class SBSCoKrProgramsVodIE(InfoExtractor):
|
class SBSCoKrProgramsVodIE(InfoExtractor):
|
||||||
|
@ -191,10 +192,9 @@ 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)
|
||||||
|
|
||||||
menu_data = self._download_json(
|
program_id = 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')
|
note='Downloading program menu data')['program']['programid']
|
||||||
|
|
||||||
return self.url_result(
|
return self.url_result(
|
||||||
'https://allvod.sbs.co.kr/allvod/vodProgramDetail.do?pgmId=' + traverse_obj(
|
f'https://allvod.sbs.co.kr/allvod/vodProgramDetail.do?pgmId={program_id}', SBSCoKrAllvodProgramIE)
|
||||||
menu_data, ('program', 'programid')), SBSCoKrAllvodProgramIE)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user