Skip to content

Commit ed3c42f

Browse files
committed
Python YouTube API Tutorial
1 parent 4b23fe3 commit ed3c42f

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import os
2+
import re
3+
from datetime import timedelta
4+
from googleapiclient.discovery import build
5+
6+
api_key = os.environ.get('YT_API_KEY')
7+
8+
youtube = build('youtube', 'v3', developerKey=api_key)
9+
10+
hours_pattern = re.compile(r'(\d+)H')
11+
minutes_pattern = re.compile(r'(\d+)M')
12+
seconds_pattern = re.compile(r'(\d+)S')
13+
14+
total_seconds = 0
15+
16+
17+
nextPageToken = None
18+
while True:
19+
pl_request = youtube.playlistItems().list(
20+
part='contentDetails',
21+
playlistId="PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU",
22+
maxResults=50,
23+
pageToken=nextPageToken
24+
)
25+
26+
pl_response = pl_request.execute()
27+
28+
vid_ids = []
29+
for item in pl_response['items']:
30+
vid_ids.append(item['contentDetails']['videoId'])
31+
32+
vid_request = youtube.videos().list(
33+
part="contentDetails",
34+
id=','.join(vid_ids)
35+
)
36+
37+
vid_response = vid_request.execute()
38+
39+
for item in vid_response['items']:
40+
duration = item['contentDetails']['duration']
41+
42+
hours = hours_pattern.search(duration)
43+
minutes = minutes_pattern.search(duration)
44+
seconds = seconds_pattern.search(duration)
45+
46+
hours = int(hours.group(1)) if hours else 0
47+
minutes = int(minutes.group(1)) if minutes else 0
48+
seconds = int(seconds.group(1)) if seconds else 0
49+
50+
video_seconds = timedelta(
51+
hours=hours,
52+
minutes=minutes,
53+
seconds=seconds
54+
).total_seconds()
55+
56+
total_seconds += video_seconds
57+
58+
nextPageToken = pl_response.get('nextPageToken')
59+
60+
if not nextPageToken:
61+
break
62+
63+
total_seconds = int(total_seconds)
64+
65+
minutes, seconds = divmod(total_seconds, 60)
66+
hours, minutes = divmod(minutes, 60)
67+
68+
print(f'{hours}:{minutes}:{seconds}')

0 commit comments

Comments
 (0)