· 5 years ago · Aug 18, 2020, 02:44 AM
1from apiclient.discovery import build
2import pandas as pd
3import dateutil.parser
4import math
5import json
6
7playlist = input("Enter the playlist URL: ")
8count = playlist.count('=')
9if count == 1:
10 playlist_id = playlist.split('=')[1]
11
12elif count == 2:
13 playlist_id = playlist.split("=", 2)[2]
14else:
15 playlist_id = playlist.split("=", 3)[2].replace('&index', '')
16
17filename = input("Enter the filename to save the results (Excluding extension): ")
18
19api_key = '<YOUR API KEY>'
20youtube = build('youtube', 'v3', developerKey=api_key)
21
22test_command = youtube.playlistItems().list(part="snippet",playlistId=playlist_id).execute()
23total_pages = math.ceil(test_command.get('pageInfo').get('totalResults')/test_command.get('pageInfo').get('resultsPerPage'))
24
25urls = []
26titles = []
27dates_for_sorting = []
28dates = []
29token = ''
30
31for i in range(total_pages):
32
33 command = youtube.playlistItems().list(part="snippet",playlistId=playlist_id, pageToken=token).execute()
34 total_pages = math.ceil(command.get('pageInfo').get('totalResults')/command.get('pageInfo').get('resultsPerPage'))
35
36 for i in command.get('items'):
37 urls.append("https://youtube.com/watch?v="+i.get('snippet').get('resourceId').get('videoId'))
38 titles.append(i.get('snippet').get('title'))
39 dates_for_sorting.append(dateutil.parser.parse(i.get('snippet').get('publishedAt')))
40 dates.append(i.get('snippet').get('publishedAt'))
41 if command.get('nextPageToken'):
42 token = command.get('nextPageToken')
43 else:
44 break
45
46dates_for_sorting = sorted(dates_for_sorting)
47
48sorted_titles = [titles for _,titles in sorted(zip(dates_for_sorting,titles))]
49sorted_urls = [urls for _,urls in sorted(zip(dates_for_sorting,urls))]
50
51df = pd.DataFrame(list(zip(sorted_titles, dates, sorted_urls)), columns =['Video Title', 'Date Published', 'Video URL'])
52df.to_csv(filename+'.csv', index = False)
53