|
|
|
from datetime import timedelta |
|
from typing import List |
|
|
|
|
|
class ChapterThumbnail: |
|
"""Container for chapter thumbnails.""" |
|
|
|
def __init__(self, width: int, height: int, url: str): |
|
self.width = width |
|
self.height = height |
|
self.url = url |
|
|
|
def __repr__(self): |
|
return f'<pytubefix.chapters.ChapterThumbnail: width={self.width}, height={self.height}, url={self.url}>' |
|
|
|
|
|
class Chapter: |
|
"""Container for chapters tracks.""" |
|
title: str |
|
start_seconds: int |
|
duration: int |
|
thumbnails: List[ChapterThumbnail] |
|
|
|
def __init__(self, chapter_data: dict, duration: int): |
|
data = chapter_data['chapterRenderer'] |
|
|
|
self.title = data['title']['simpleText'] |
|
self.start_seconds = int(data['timeRangeStartMillis'] / 1000) |
|
self.duration = duration |
|
|
|
thumbnails_data = data.get('thumbnail', {}).get('thumbnails', []) |
|
self.thumbnails = [ |
|
ChapterThumbnail( |
|
width=thumb['width'], |
|
height=thumb['height'], |
|
url=thumb['url'] |
|
) |
|
for thumb in thumbnails_data |
|
] |
|
|
|
@property |
|
def start_label(self) -> str: |
|
return str(timedelta(seconds=self.start_seconds)) |
|
|
|
def __repr__(self): |
|
return f'<Chapter: {self.title} | {self.start_label}>' |
|
|