def playlist_videos(youtube: api.Resource, playlist_id: str) -> Iterator[YouTubeVideoItemResource]: global _total_quota_usage page_token = None while True: _total_quota_usage += 1 playlist_request = youtube.playlistItems().list( part="contentDetails,snippet", maxResults=50, playlistId=playlist_id, pageToken=page_token, ) raw_playlist_response = playlist_request.execute() playlist_response = YouTubePlaylistListResponse.from_dict( raw_playlist_response) video_request = youtube.videos().list( id=",".join([ item.contentDetails.videoId for item in playlist_response.items if item.snippet.title not in ["Deleted video", "Private video"] ]), part="contentDetails,snippet", ) raw_response = video_request.execute() video_response = YouTubeVideoListResponse.from_dict(raw_response) for playlist_item in video_response.items: yield playlist_item if playlist_response.nextPageToken is None: break page_token = playlist_response.nextPageToken
def insert_playlist_item(youtube: d.Resource, youtube_id: str, playlist_id: str, position: int): print(f'Inserting #{youtube_id} into playlist at position {position}') request = youtube.playlistItems().insert(part="snippet", body={ "snippet": { "playlistId": playlist_id, "position": position, "resourceId": { "kind": "youtube#video", "videoId": youtube_id } } }) response = request.execute() return response
def get_channel_videos(youtube: d.Resource): print(f"Get videos for my channel") request = youtube.channels().list(mine=True, part='contentDetails') uploads = request.execute() playlist_id = \ uploads["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"] uploaded_videos = [] next_page_token = None while 1: res = youtube.playlistItems().list( playlistId=playlist_id, part='snippet', maxResults=50, pageToken=next_page_token).execute() uploaded_videos += res['items'] next_page_token = res.get('nextPageToken') if next_page_token is None: break return uploaded_videos