1
0
mirror of https://github.com/l1ving/youtube-dl synced 2024-11-20 18:12:52 +08:00

[pbs] extract chapters information

This commit is contained in:
remitamine 2016-05-05 21:42:37 +01:00 committed by Remita Amine
parent fa2a36d9bc
commit 7a6d33a9a5

View File

@ -8,6 +8,7 @@ from ..utils import (
ExtractorError, ExtractorError,
determine_ext, determine_ext,
int_or_none, int_or_none,
float_or_none,
js_to_json, js_to_json,
strip_jsonp, strip_jsonp,
strip_or_none, strip_or_none,
@ -464,6 +465,7 @@ class PBSIE(InfoExtractor):
redirects.append(redirect) redirects.append(redirect)
redirect_urls.add(redirect_url) redirect_urls.add(redirect_url)
chapters = []
# Player pages may also serve different qualities # Player pages may also serve different qualities
for page in ('widget/partnerplayer', 'portalplayer'): for page in ('widget/partnerplayer', 'portalplayer'):
player = self._download_webpage( player = self._download_webpage(
@ -479,6 +481,20 @@ class PBSIE(InfoExtractor):
extract_redirect_urls(video_info) extract_redirect_urls(video_info)
if not info: if not info:
info = video_info info = video_info
if not chapters:
for chapter_data in re.findall(r'(?s)chapters\.push\(({.*?})\)', player):
chapter = self._parse_json(chapter_data, video_id, js_to_json, fatal=False)
if not chapter:
continue
start_time = float_or_none(chapter.get('start_time'), 1000)
duration = float_or_none(chapter.get('duration'), 1000)
if start_time is None or duration is None:
continue
chapters.append({
'start_time': start_time,
'end_time': start_time + duration,
'title': chapter.get('title'),
})
formats = [] formats = []
http_url = None http_url = None
@ -588,4 +604,5 @@ class PBSIE(InfoExtractor):
'upload_date': upload_date, 'upload_date': upload_date,
'formats': formats, 'formats': formats,
'subtitles': subtitles, 'subtitles': subtitles,
'chapters': chapters,
} }