В предыдущем посте и видео, посвященном YouTube API я показал как на Python получить список всех видео на канале с использованием ресурса YouTube Data API Search. В том способе много удобных инструментов — сортировки и фильтров. Но есть критический недостаток — очень сильный расход квот. Сегодня я покажу другой способ с использованием ресурса playlistItems.list. Этот способ наоборот очень дешев в плане расхода квот, но у него нет вообще никаких фильтров и сортировок. Подробно о способе смотри в видео:
Исходники на Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import json import _creds from googleapiclient.discovery import build if __name__ == '__main__': print("** Hola Hey, Azzrael Code YT subs!!!\n") channel_id = 'UCjWOzgG0oTFHy4N4BeDmBhg' service_simple = build('youtube', 'v3', developerKey=_creds.yt_api_key) # https://developers.google.com/youtube/v3/docs/channels/list r = service_simple.channels().list(id=channel_id, part='contentDetails').execute() uploads_playlist_id = r['items'][0]['contentDetails']['relatedPlaylists']['uploads'] videos = [] args = { 'playlistId' : uploads_playlist_id, 'part' : 'snippet', 'maxResults': 50, } for _ in range(0, 500): # https://developers.google.com/youtube/v3/docs/playlistItems/list r = service_simple.playlistItems().list(**args).execute() for item in r['items']: snpt = item['snippet'] videos.append({ 'type' : snpt['resourceId']['kind'], 'videoId' : snpt['resourceId'].get('videoId'), 'publishedAt' : snpt['publishedAt'], 'title' : snpt['title'], }) args['pageToken'] = r.get('nextPageToken') if not args['pageToken']: break print(*videos, sep="\n") with open(f"lists/{channel_id}.csv", "w+", encoding="utf-8") as f: f.write("\n".join([f"{v['videoId']};{v['publishedAt']};{v['title']}" for v in videos])) |
В зависимостях только Python клиент для Google API
google-api-python-client .
Также понадобится созданный в Google Cloud Console проект и API Key. Подробно об этом я рассказывал здесь.