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}')