Move playlist paginator out to get a clean looking generator.

master
voussoir 2020-11-10 17:54:21 -08:00
parent 294ccb77d9
commit 81bd7b9ca2
1 changed files with 12 additions and 9 deletions

View File

@ -56,7 +56,7 @@ class Youtube:
)
self.log = vlogging.getLogger(__name__)
def get_playlist_videos(self, playlist_id):
def _playlist_paginator(self, playlist_id):
page_token = None
while True:
response = self.youtube.playlistItems().list(
@ -65,18 +65,21 @@ class Youtube:
part='contentDetails',
playlistId=playlist_id,
).execute()
yield from response['items']
page_token = response.get('nextPageToken', None)
video_ids = [item['contentDetails']['videoId'] for item in response['items']]
videos = self.get_videos(video_ids)
videos.sort(key=lambda x: x.published, reverse=True)
for video in videos:
yield video
if page_token is None:
break
def get_playlist_videos(self, playlist_id):
paginator = self._playlist_paginator(playlist_id)
video_ids = (item['contentDetails']['videoId'] for item in paginator)
videos = self.get_videos(video_ids)
videos.sort(key=lambda x: x.published, reverse=True)
yield from videos
def get_related_videos(self, video_id, count=50):
if isinstance(video_id, Video):
video_id = video_id.id