import csv import sys from youtube import config from youtube import api # List Channel Videos # # Uses the YouTube Data API search/list call to find all videos for a channel. # Also calls videos/list to get the statuses (public/private) of the videos. if len(sys.argv) < 2: print('Usage: {} channel_id'.format(sys.argv[0])) exit(-1) channel_id = sys.argv[1] csv_path = 'list_channel_videos.csv' print('Writing output to {}'.format(csv_path)) columns = ['video_id', 'title', 'description', 'published_at', 'status'] data_api = config.api_mapping.youtube_data page_wait_time = 0.0004 search_list = api.paginate(data_api.search().list, page_wait_time) video_list = api.paginate(data_api.videos().list, page_wait_time) with open(csv_path, 'w', newline='') as csv_out: csv_writer = csv.writer(csv_out) csv_writer.writerow(columns) search_list_results = search_list( channelId=channel_id, type='video', maxResults=50, part='snippet') for search_list_result in search_list_results: videos = {} items = search_list_result.get('items') or () for item in items: snippet = item.get('snippet') video_id = item['id']['videoId'] videos[video_id] = { 'video_id': video_id, 'title': snippet.get('title'), 'description': snippet.get('description'), 'published_at': snippet.get('publishedAt')} video_list_results = video_list( id=','.join(videos.keys()), part='status', maxResults=50) for video_list_result in video_list_results: items = video_list_result.get('items') or () for item in items: video_id = item.get('id') videos[video_id]['status'] = item['status']['privacyStatus'] for video_id in videos: video = videos[video_id] row = [] for column in columns: row.append(video[column]) csv_writer.writerow(row)