This gets every video in playlist with nextPageToken
in a
while True:
loop
from datetime import timedelta import re import os from googleapiclient.discovery import build import json # Get new api key this one is fake api_key = 'AIzaSyBycc_eAr1_P3NWDzR08IHkCA3_44wKEDM' youtube = build('youtube', 'v3', developerKey=api_key) playlist_id = 'PL-osiE80TeTsWmV9i9c58mdDCSskIFdDS' channel_id = 'UCCezIgC97PvUuR4_gbFUs5g' hours_pattern = re.compile(r'(\d+)H') mins_pattern = re.compile(r'(\d+)M') secs_pattern = re.compile(r'(\d+)S') nextPageToken = None while True: playlistItems_request = youtube.playlistItems().list( part='contentDetails', playlistId=playlist_id, maxResults=50, pageToken=nextPageToken ) playlistItems_response = playlistItems_request.execute() vid_ids = [] for pl_item in playlistItems_response['items']: vid_ids.append(pl_item['contentDetails']['videoId']) videos_request = youtube.videos().list( part="contentDetails,snippet", id=','.join(vid_ids), # maxResults = 2 ) os.system('clear') videos_response = videos_request.execute() for vid in videos_response['items']: duration = vid['contentDetails']['duration'] hours = hours_pattern.search(duration) mins = mins_pattern.search(duration) secs = secs_pattern.search(duration) hours = int(hours.group(1)) if hours else 0 mins = int(mins.group(1)) if mins else 0 secs = int(secs.group(1)) if secs else 0 video_seconds = timedelta( hours = hours, minutes=mins, seconds=secs ).total_seconds() print(vid['snippet']['title']) print(video_seconds) nextPageToken = playlistItems_response.get('nextPageToken') if not nextPageToken: break
from datetime import timedelta import re import os from googleapiclient.discovery import build import json # Get new api key this one is fake api_key = 'AIzaSyBycc_eAr1_P3NWDzR08IHkCA3_44wKEDM' youtube = build('youtube', 'v3', developerKey=api_key) playlist_id = 'PL-osiE80TeTsWmV9i9c58mdDCSskIFdDS' channel_id = 'UCCezIgC97PvUuR4_gbFUs5g' hours_pattern = re.compile(r'(\d+)H') mins_pattern = re.compile(r'(\d+)M') secs_pattern = re.compile(r'(\d+)S') total_seconds = 0 nextPageToken = None while True: playlistItems_request = youtube.playlistItems().list( part='contentDetails', playlistId=playlist_id, maxResults=50, pageToken=nextPageToken ) playlistItems_response = playlistItems_request.execute() vid_ids = [] for pl_item in playlistItems_response['items']: vid_ids.append(pl_item['contentDetails']['videoId']) videos_request = youtube.videos().list( part="contentDetails,snippet", id=','.join(vid_ids), ) os.system('clear') videos_response = videos_request.execute() for vid in videos_response['items']: duration = vid['contentDetails']['duration'] hours = hours_pattern.search(duration) mins = mins_pattern.search(duration) secs = secs_pattern.search(duration) hours = int(hours.group(1)) if hours else 0 mins = int(mins.group(1)) if mins else 0 secs = int(secs.group(1)) if secs else 0 video_seconds = timedelta( hours = hours, minutes=mins, seconds=secs ).total_seconds() total_seconds += video_seconds nextPageToken = playlistItems_response.get('nextPageToken') if not nextPageToken: break total_seconds = int(total_seconds) minutes,seconds = divmod(total_seconds,60) hours,minutes = divmod(minutes,60) print(f'{hours}:{minutes}:{seconds}')