Получение списка видео загруженных на канал на YouTube (свой или чужой) задача частая и достаточно легко решаемая с помощью YouTube API. Сегодня я покажу как на Python решить эту задачу и получить списки видео из любого публичного канала. Максимально подробно я все рассказал в видео:
Метод search.list YouTube API для получения списка видео по channelId
Метод YouTube API search.list предназначен для поиска разных ресурсов на YouTube (а не только видео). Однако с аргументом channelId равным id YouTube канала и аргументом type равным ‘video’ я как раз могу получить все видео на выбранном канале.
За один запрос я могу получить максимум 50 роликов. Если нужно больше, то придется организовывать итерацию с пагинацией для получения всех видео порционно. Для это в ответе search.list есть поле nextPageToken, кот. нужно передавать в аргументе pageToken search.list при последующем запросе. nextPageToken после каждого запроса новый!
За каждый запрос к YouTube API search.list потратит 100 юнитов квоты (которая для YouTube API составляет 10000 юнитов/сутки). Что достаточно много.
Запросы можно оптимизировать в зависимости от решаемых задач используя аргументы search.list:
- order — для сортировки видео ПЕРЕД получением списка, таким обрадом мы можем за один запрос получить до 50 самых свежих видео (date), или самых просматриваемых (viewCount), или самых популярных (rating). К сожалению в YouTube API search.list нет возможности выбрать направление сортировки (orderby) чтобы выбрать, например, самые провальные по просмотрам видео.
- publishedAfter / publishedBefore — для выбора периода в которые видео были опубликованы.
Исходники на 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 |
import datetime import json from googleapiclient.discovery import build API_KEY = "************************" def main(): """ https://developers.google.com/youtube/v3/docs/search/list :return: """ print('YouTube API Получаю свежие видео на канале') channelId = "UCf6kozNejHoQuFhBDB8cfxA" service = build('youtube', 'v3', developerKey=API_KEY) r = service.search().list( channelId=channelId, part="snippet", type='video', order='rating', maxResults="15", # publishedAfter=datetime.datetime(2021, 1, 1, 0, 0, tzinfo=datetime.timezone.utc).isoformat(), # publishedBefore=datetime.datetime(2022, 1, 1, 0, 0, tzinfo=datetime.timezone.utc).isoformat() ).execute() # print(json.dumps(r)) print(f"nextPageToken {r['nextPageToken']}") [print("%s, %s, https://youtu.be/%s" % (item['snippet']['title'], item['snippet']['publishedAt'], item['id']['videoId'])) for item in r['items']] |
В requirements.txt достаточно:
1 |
google-api-python-client |
Если вы раньше не работали с Google API и не знакомы со всей схемой работы с YouTube API (а там нужно уметь создавать проект в Google Cloud Console и получать ключи доступа), то настоятельно рекомендую почитать эту статью.