mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[pbs] extract chapters information
This commit is contained in:
		@@ -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,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user