104 lines
2 KiB
Python
104 lines
2 KiB
Python
import typing as t
|
|
|
|
from . import BasePipedModel
|
|
from .videos import Video
|
|
|
|
|
|
|
|
class NextPageChannel(BasePipedModel):
|
|
"""
|
|
Represents a channel obtained via the `nextpage` endpoint.
|
|
|
|
This model contains only `nextpage` and `relatedStreams`. It's a parent for `Channel`.
|
|
"""
|
|
|
|
@property
|
|
def nextpage(self) -> str:
|
|
"""
|
|
A JSON encoded string to be passed to the `'nextpage'` endpoint(s) when
|
|
obtaining paginated data.
|
|
"""
|
|
|
|
return self.data['nextpage']
|
|
|
|
|
|
@property
|
|
def uploaded_videos(self) -> t.List[Video.RelatedStream]:
|
|
"""
|
|
List of uploaded videos from the current fetched data
|
|
|
|
There are max. 30 videos per page
|
|
"""
|
|
|
|
return [Video.RelatedStream(video_data) for video_data in self.data['relatedStreams']]
|
|
|
|
|
|
|
|
class Channel(NextPageChannel):
|
|
"""
|
|
Represents a YouTube channel.
|
|
|
|
Contains properties of `NextPageChannel`.
|
|
"""
|
|
|
|
@property
|
|
def id(self) -> str:
|
|
"""
|
|
The channel's ID
|
|
"""
|
|
|
|
return self.data['id']
|
|
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
"""
|
|
The channel's name
|
|
"""
|
|
|
|
return self.data['name']
|
|
|
|
|
|
@property
|
|
def avatar_url(self) -> str:
|
|
"""
|
|
The channel's avatar URL
|
|
"""
|
|
|
|
return self.data['avatarUrl']
|
|
|
|
|
|
@property
|
|
def banner_url(self) -> str:
|
|
"""
|
|
The channel's banner URL
|
|
"""
|
|
|
|
return self.data['bannerUrl']
|
|
|
|
|
|
@property
|
|
def description(self) -> str:
|
|
"""
|
|
The channel's description
|
|
"""
|
|
|
|
return self.data['description']
|
|
|
|
|
|
@property
|
|
def subscriber_count(self) -> int:
|
|
"""
|
|
The number of subscribers the channel has
|
|
"""
|
|
|
|
return self.data['subscriberCount']
|
|
|
|
|
|
@property
|
|
def verified(self) -> bool:
|
|
"""
|
|
Whether or not the channel is verified by YouTube (has a badge)
|
|
"""
|
|
|
|
return self.data['verified']
|