Список воспроизведения API данных Youtube | Комплект-3

Опубликовано: 8 Июля, 2021

Из предыдущей статьи мы увидели, что API можно использовать для вставки, обновления или удаления списка воспроизведения. Теперь возникает вопрос: после того, как мы создали список воспроизведения, нужно ли нам переходить на Youtube и вручную добавлять видео во вновь созданный список воспроизведения. НЕТ!!! все, что вам нужно сделать, это использовать учетные данные OAuth и просто знать идентификатор списка воспроизведения, чтобы добавить видео в список воспроизведения.

Мы можем найти идентификатор плейлиста для конкретного плейлиста, с которым мы хотим работать. Что ж, ответ - есть два способа найти Id:

  1. Первый способ - использовать код, который мы обсуждали в предыдущей статье, чтобы вывести список всех ваших плейлистов. Это сгенерирует список принадлежащего вам списка воспроизведения, в котором также будет указан идентификатор вместе с именем.
  2. Второй способ - войти в свою учетную запись Youtube. Перейдите к желаемому списку воспроизведения, щелкните по нему и выберите опцию обмена. Это покажет вам идентификатор списка воспроизведения.

Поскольку все это требует авторизации пользователя, сначала мы создадим учетные данные OAuth.
Перед добавлением видео мы увидим, как составить список содержимого плейлиста с помощью кода.
Выполните следующие действия, чтобы сгенерировать идентификатор клиента и секретный ключ.

  1. Перейдите в консоль разработчиков Google Google и нажмите « Войти» в правом верхнем углу страницы. Войдите в систему, используя учетные данные действующей учетной записи Google. Если у вас нет учетной записи Google, сначала настройте учетную запись, а затем используйте данные для входа на главной странице Google Developers.
  2. Теперь перейдите к панели инструментов разработчика и создайте новый проект.
  3. Нажмите на опцию Включить API .
  4. В поле поиска найдите Youtube Data API и выберите опцию Youtube Data API в раскрывающемся списке.
  5. Вы будете перенаправлены на экран с информацией об API данных Youtube, а также с двумя вариантами: ВКЛЮЧИТЬ и ПОПРОБОВАТЬ API .
  6. Нажмите кнопку ВКЛЮЧИТЬ, чтобы начать работу с API.
  7. На боковой панели в разделе API и службы выберите Учетные данные .
  8. Вверху страницы выберите вкладку экрана согласия OAuth. Выберите адрес электронной почты, введите название продукта, если оно еще не установлено, и нажмите кнопку «Сохранить».
  9. На вкладке «Учетные данные» выберите раскрывающийся список «Создать учетные данные» и выберите « Идентификатор клиента OAuth» . OAuth обычно используется там, где требуется авторизация, например, в случае получения понравившихся видео пользователя.
  10. Выберите тип приложения «Другое», введите имя «YouTube Data API Myvideos», нажмите кнопку «Создать» и нажмите кнопку «ОК».
  11. Нажмите кнопку « Загрузить» справа от идентификатора клиента, чтобы загрузить файл JSON.
  12. Сохраните и переименуйте файл как client_secret.json и переместите его в рабочий каталог.

Установите дополнительные библиотеки с помощью команды pip :

 pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2

Код для отображения элементов списка воспроизведения:




import os
import google.oauth2.credentials
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow
  
# The CLIENT_SECRETS_FILE variable specifies 
# the name of a file that contains
# client_id and client_secret.
CLIENT_SECRETS_FILE = "client_secret.json"
  
# This scope allows for full read/write 
# access to the authenticated user"s account 
# and requires requests to use an SSL connection.
API_SERVICE_NAME = "youtube"
API_VERSION = "v3"
  
def get_authenticated_service():
    flow = InstalledAppFlow.from_client_secrets_file(
                         CLIENT_SECRETS_FILE, SCOPES)
                           
    credentials = flow.run_console()
    return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
  
def print_response(response):
    print(response)
  
# Build a resource based on a list of 
# properties given as key-value pairs.
# Leave properties with empty values out 
# of the inserted resource.
def build_resource(properties):
    resource = {}
    for p in properties:
        # Given a key like "snippet.title", split
        # into "snippet" and "title", where
        # "snippet" will be an object and "title" 
        # will be a property in that object.
        prop_array = p.split(".")
        ref = resource
        for pa in range(0, len(prop_array)):
            is_array = False
            key = prop_array[pa]
      
        # For properties that have array values, 
        # convert a name like "snippet.tags[]" to
        # snippet.tags, and set a flag to handle
        # the value as an array.
        if key[-2:] == "[]":
            key = key[0:len(key)-2:]
            is_array = True
      
        if pa == (len(prop_array) - 1):
            # Leave properties without values 
            # out of inserted resource.
            if properties[p]:
            if is_array:
                ref[key] = properties[p].split(",")
            else:
                ref[key] = properties[p]
        elif key not in ref:
            # For example, the property is "snippet.title",
            # but the resource does not yet have a "snippet"
            # object. Create the snippet object here. Setting 
            # "ref = ref[key]" means that in the next time 
            # through the "for pa in range ..." loop, we will 
            # be setting a property in the resource"s "snippet" object.
            ref[key] = {}
            ref = ref[key]
        else:
            # For example, the property is "snippet.description",
            # and the resource already has a "snippet" object.
            ref = ref[key]
    return resource
  
# Remove keyword arguments that are not set
def remove_empty_kwargs(**kwargs):
    good_kwargs = {}
    if kwargs is not None:
        for key, value in kwargs.items():
        if value:
            good_kwargs[key] = value
    return good_kwargs
  
def playlist_items_list(client, **kwargs):
  
    kwargs = remove_empty_kwargs(**kwargs)
    response = client.playlistItems().list(**kwargs).execute()
      
    return print_response(response)
  
  
if __name__ == "__main__":
    # When running locally, disable OAuthlib"s
    # HTTPs verification. When running in production 
    # *do not* leave this option enabled.
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
    client = get_authenticated_service()
      
    playlist_items_list(client,
        part="snippet,contentDetails",
        maxResults=3,
        playlistId="PLqAJNJC4tCYtyVYlRABk5NTDDi2sfqbqV")

Выход:
Когда вы выполните код, вам будет предложено ввести код авторизации. Для получения кода вам необходимо перейти по ссылке, указанной на экране командной строки над строкой: Введите код авторизации.

Теперь перейдите по ссылке и скопируйте и вставьте код авторизации, который вы получите, предоставив разрешение.

Для удобства мы установили параметр maxResults равным 3. В противном случае количество totalResults равно 32. Это означает, что запрашиваемый плейлист состоит из 32 видео.

Код для вставки видео: в этом примере показано, как вставить видео в список воспроизведения. Идентификатор, snippet.resourceId.kind и snippet.resourceId.videoId являются обязательными атрибутами.
Перед добавлением видео в требуемый список воспроизведения мы сначала загрузим видео на канал YouTube, а затем назначим видео желаемому списку воспроизведения, используя идентификатор видео. Выполните действия, указанные в видеороликах Youtube Data API | Комплект-3 статья для загрузки видео. Для справки, я использовал тот же код и загрузил то же видео на канал Youtube.




import os
import google.oauth2.credentials
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow
# The CLIENT_SECRETS_FILE variable specifies
# the name of a file that contains
# client_id and client_secret.
CLIENT_SECRETS_FILE = "client_secret.json"
# This scope allows for full read/write access
# to the authenticated user's account and requires
# requests to use an SSL connection.
API_SERVICE_NAME = 'youtube'
API_VERSION = 'v3'
def get_authenticated_service():
flow = InstalledAppFlow.from_client_secrets_file(
CLIENT_SECRETS_FILE, SCOPES)
credentials = flow.run_console()
return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
def print_response(response):
print (response)
# Build a resource based on a list of properties
# given as key-value pairs. Leave properties with
# empty values out of the inserted resource.
def build_resource(properties):
resource = {}
for p in properties:
# Given a key like "snippet.title", split into
# "snippet" and "title", where "snippet" will be
# an object and "title" will be a property in that object.
prop_array = p.split( '.' )
ref = resource
for pa in range ( 0 , len (prop_array)):
is_array = False
key = prop_array[pa]
# For properties that have array values,
# convert a name like "snippet.tags[]" to
# snippet.tags, and set a flag to handle
# the value as an array.
if key[ - 2 :] = = '[]' :
key = key[ 0 : len (key) - 2 :]
is_array = True
if pa = = ( len (prop_array) - 1 ):
# Leave properties without values
# out of inserted resource.
if properties[p]:
if is_array:
ref[key] = properties[p].split( ',' )
else :
ref[key] = properties[p]
key elif not in ref:
# For example, the property is "snippet.title",
# but the resource does not yet have a "snippet"
# object. Create the snippet object here.
# Setting "ref = ref[key]" means that in the next
# time through the "for pa in range ..." loop, we
# will be setting a property in the
# resource's "snippet" object.
ref[key] = {}
ref = ref[key]
else :
# For example, the property is "snippet.description",
# and the resource already has a "snippet" object.
ref = ref[key]
return resource
# Remove keyword arguments that are not set
def remove_empty_kwargs( * * kwargs):
good_kwargs = {}
if kwargs not is None :
for key, value in kwargs.items():
if value:
good_kwargs[key] = value
return good_kwargs
def playlist_items_insert(client, properties, * * kwargs):
resource = build_resource(properties)
kwargs = remove_empty_kwargs( * * kwargs)
response = client.playlistItems().insert(
body = resource, * * kwargs).execute()
return print_response(response)
if __name__ = = '__main__' :
# When running locally, disable OAuthlib's HTTPs
# verification. When running in production *do not*
# leave this option enabled.
os.environ[ 'OAUTHLIB_INSECURE_TRANSPORT' ] = '1'
client = get_authenticated_service()
playlist_items_insert(client,
{ 'snippet.playlistId' : 'PLqAJNJC4tCYtyVYlRABk5NTDDi2sfqbqV' ,
'snippet.resourceId.kind' : 'youtube#video' ,
'snippet.resourceId.videoId' : 'MhPgMbYkuHc' ,
'snippet.position' : ''},
part = 'snippet' ,
onBehalfOfContentOwner = '')

Выход:
Когда вы выполните код, вам будет предложено ввести код авторизации. Для получения кода вам необходимо перейти по ссылке, указанной на экране командной строки над строкой: Введите код авторизации.

Теперь перейдите по ссылке и скопируйте и вставьте код авторизации, который вы получите, предоставив разрешение.

Как видите, видео добавлено в плейлист. Если вы запустите описанный выше код, чтобы перечислить все элементы в упомянутом списке воспроизведения, вы увидите, что параметр totalResults теперь имеет значение 33.

Рекомендации:

  1. https://developers.google.com/youtube/v3/docs/playlistItems/insert
  2. https://developers.google.com/youtube/v3/docs/playlistItems/list
  3. https://developers.google.com/youtube/v3/docs/playlistItems